我正在使用Ruby on Rails 3.0.10,我想将一些参数传递给默认的渲染方法。也就是说,如果我有像
这样的代码def show
...
respond_to do |format|
format.html # This, by default, renders the 'show.html.erb' file
end
end
我想传递一些参数,也许就像(注意:以下不起作用)
def show
...
respond_to do |format|
# Here I would like to add some local objects that will be available in the 'show.html.erb' template file
format.html { render ..., :locals => { :content => { :value => 'Sample value' } } }
end
end
以便在show.html.erb
模板中我可以创建类似的内容:
<%=
content[:value]
# => 'Sample value'
%>
简而言之,我希望以与:locals
键相关的部分模板渲染相同的方式传递参数值:
render :partial,
:locals => {
:content => { :value => 'Sample value' }
}
我该怎么做?
答案 0 :(得分:6)
您可以完全按照您的描述进行操作。我在这里http://apidock.com/rails/ActionController/Base/render在“渲染模板”标题下查找了它并自己给了它一个旋转。你每天都学到新东西。
你可以简单地做
def show
respond_to do |format|
format.html { render :locals => { :content => { :value => 'Sample value' } } }
end
end
我会考虑为什么你需要这样做而不是使用实例变量。也许有更好的方法。
答案 1 :(得分:3)
如何设置实例变量?
# your_controller.rb
def show
@content_value = ...
end
# show.html.erb
<%= @content_value %>
答案 2 :(得分:1)
通常当我们处理动作show.html.erb
是action
视图而不是partial
视图时,我们通过控制器上的实例变量传递参数,例如
def show
...
@foo = "bar"
respond_to do |format|
format.html
end
end
现在,在app/views/foos/show.html.erb
文件中,我们可以访问@foo
。
渲染部分时,有几种方法可以传递参数:
默认情况下会显示部分app/views/foos/_foo.html.erb
,因为它知道@foo
的类型为Foo
。在其中,您可以自动访问foo
变量。
<%= render @foo %>
这里我们将呈现app/views/foos/_foo_details.html.erb
,并传入一个对象。该对象采用部分名称,因此在_foo_details.html.erb
内,我们可以访问名为foo_details
的变量。
<%= render :partial => "foo_details", :object => @foo %>
最后,主要与您的问题相关,我们将呈现一个名为_foo_things.html.erb
的部分并将其传递给一些本地人。在这种情况下,您将获得一个名为title
的局部变量,您可以使用它。
<%= render :partial => "foo_things", :locals => {:title=> "Test 123"} %>
我希望能回答你的问题。