我无法将某些原因传递给show view ...
在我的控制器中我简单地说:
def show
render template: "books/show", :resource => "Some text"
end
在我看来,我打印以下内容:
<h1>My local variable text: <%= resource %></h1>
我收到以下消息:
undefined local variable or method `resource' for #<#<Class:0x00000118ebce90>: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" }
没有运气......
任何线索?
谢谢!
答案 0 :(得分:7)
我认为它应该像
render 'books/show', :locals => {:resource => 'Some text'}
它对我有用
答案 1 :(得分:6)
这是一个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
<h1><%= @title %></h1>
<强>输出:强>
Shattered View: A Novel on Rails
在NovelController#index
运行后解释视图。以下是视图可以访问和不能访问的内容:
@title
,因为它们已经NovelController
对象在NovelController#index
完成运行时定义。@title
的实例方法。答案 2 :(得分:4)
您无法将本地变量从控制器传递到视图。您可以做的是将其定义为实例变量,然后它将自动在视图中可用。
@resource = @book
如果要传递完全不同的对象,则只需以不同方式定义这些实例变量即可。
答案 3 :(得分:4)
首先,我想知道你为什么需要System.Reactive.Concurrency.IScheduler
。你是Rails 2.x吗?如果不是,则不再需要template:
选项。你应该能够与
:template
第二,你需要指定模板吗?你想要渲染的控制器是什么?如果那是render "books/show"
,那么您也不需要模板路径,这使得该行只是
BooksController
没有变量的那个。现在,我刚刚检查了一下,简单:
render
以及:
render locals: { resource: "Some text" }
对我来说很好。也许早期的Rails版本处理过资源&#39;作为某种关键词?不知道,但两种形式的上述Worksforme™。
答案 4 :(得分:2)
您可以按如下方式获取。所有都给出了相同的结果。这是reference链接。
render action: :show , locals: { resource: "Some text"}
render :show , locals: { resource: "Some text"}
render locals: { resource: "Some text"}