将局部变量传递给控制器的视图
我无法出于某种原因将局部变量传递给show视图……
在我的控制器中我简单地说:
def show render template: "books/show", :resource => "Some text" end
在我看来,我打印以下内容:
My local variable text:
我收到以下消息:
undefined local variable or method `resource' for #<#:0x00000118ec3498>
我在控制器中尝试了以下语法:
render template: "books/show", locals: { resource: "Some text" } render template: "books/show", locals: { resource => "Some text" } render template: "books/show", :locals => { resource: "Some text" } render template: "books/show", :locals => { resource => "Some text" }
没有运气……
有什么线索吗?
谢谢!
我认为它应该是这样的
render 'books/show', :locals => {:resource => 'Some text'}
这个对我有用
将数据从Controller传递到视图
这是一个NovelController类,放在app/ controllers/novel_controller.rb.
class NovelController < ApplicationController def index @title = 'Shattered View: A Novel on Rails' end end
由于这是Novel控制器和索引操作,因此相应的视图位于app/views/novel/index.html.erb
<%= @title %>
输出:
Shattered View: A Novel on Rails
运行NovelController#index
后解释视图。 以下是视图可以访问和不能访问的内容:
- 它可以访问实例变量
@title
,因为它们是在NovelController
NovelController#index
完成运行时在NovelController
对象上定义的。 - 它可以调用实例变量
@title
实例方法。
首先,我想知道你为什么需要template:
。 你是Rails 2.x吗? 如果没有,则不再需要:template
选项。 你应该能够与刚刚相处得很好
render "books/show"
第二,你需要指定模板吗? 你想要渲染的控制器是什么? 如果那是BooksController
,那么你也不需要模板路径,这使得线条正好
render
那还没有变量。 现在,我刚刚检查过,简单一点:
render locals: { resource: "Some text" }
以及:
render 'books/show', locals: { resource: "Some text" }
对我来说很好。 也许早期的Rails版本将“资源”视为某种关键字? 不知道,但两种forms的上述Worksforme™。
您不能将局部变量从控制器传递到视图。 您可以做的是将其定义为实例变量,然后它将自动在视图中可用。
@resource = @book
如果要传递完全不同的对象,则只需以不同方式定义这些实例变量。
您可以按如下方式获得它。 所有都给出相同的结果。 这是参考链接。
render action: :show , locals: { resource: "Some text"} render :show , locals: { resource: "Some text"} render locals: { resource: "Some text"}