在渲染中传递参数 - Rails 3

时间:2012-07-01 16:22:48

标签: ruby-on-rails ruby-on-rails-3 parameters partial renderpartial

我在这方面看到了几个问题,但一直无法解决......

我正在尝试在渲染部分时传递参数(类似于domainname.com/memory_books/new?fbookupload=yes)

现在,我使用这一行:

<%= render :partial => '/memory_books/new', :fbookupload => "yes" %>

在部分内容中,我尝试使用以下方法获取fbookupload的内容:

<%= fbookupload %>

给出了“未定义的局部变量”错误和

<%= params.inspect %>

,它不会将fbookupload显示为参数。

如何对参数进行部分传递:fbookupload?

谢谢。

更新

它是否与我在渲染中渲染它的事实有关?

即。

页面(/ fbookphotos / show)
<%= render :partial => '/memory_books/new', :fbookupload => "yes" %>

由另一个页面呈现(posts / show)via:

<%= render :partial => '/fbookphotos/show' %>

所以我在渲染中渲染它。

6 个答案:

答案 0 :(得分:17)

试试这个:

<%= render :partial => '/memory_books/new', :locals => {:fbookupload => "yes"} %>

答案 1 :(得分:13)

将其从后代的评论中删除。这种语法是正确的:

render '/memory_books/new', fbookupload: "yes"

但是如果有一个引用来渲染相同的部分而没有指定局部变量,例如

render '/memory_books/new'

然后fbookupload变量变得不可用。这同样适用于多个局部变量,例如

render 'my_partial', var1: 'qq', var2: 'qqq'
如果只发生一次,

将起作用。但如果代码中的其他地方有类似的内容

render 'my_partial', var1: 'qq'

然后var2将无法使用。去图......

答案 2 :(得分:0)

按照你的方式去做:

在主视图中:

<% fbookupload = "yes" %>
<%= render :partial => '/memory_books/new', :locals => {:fbookupload => fbookupload} %>

在部分:

<%= fbookupload %>

第二个选项:

理想情况下,在控制器中,否则在视图中,定义一个实例变量:@fbookupload = "yes"。然后随处可用。部分将是:<%= @fbookupload %>

答案 3 :(得分:0)

Params只是请求参数,所以如果你想在params中传递它,你必须将它添加到你的网址?fbookupload=yes或分配它params[:fbookupload] = "yes",但我认为这不是一个好的理念。

但是如果你需要使用params[:fbookupload]', u can replace it with参数[:fbookupload] || fbookupload',并将fbookupload传递给locals hash for partial。

答案 4 :(得分:0)

已经回答,但要确认在5.2导轨上可以正常工作:

部分通话:

<%= render partial: 'some_partial', locals: { value: 'some_value' } %>

您需要明确添加partial,否则将无法正常工作。

在部分本身中,您以local variable的身份访问,因此它保持为:value == 'somevalue'

检查有关部分渲染器的导轨documentation

答案 5 :(得分:0)

render可以在有或没有partial参数的情况下调用,关于这两种形式之间的差异似乎有些困惑。

以下两个是等效的:

<%= render "my_partial', my_param: true %>

和:

<%= render partial: "my_partial', locals: { my_param: true } %>

第一个是允许您省略partial:的简写。使用此速记,局部变量也不会嵌套在locals:下。 the documentation中对此进行了很好的解释(请参阅“呈现默认情况”)。

在上述两种情况下,您将直接通过my_param局部访问my_param

另一个混乱的根源是,如果在不通过my_param的情况下将局部渲染,则该局部将在尝试访问它时失败。要解决此问题,您可以使用local_assigns[:my_param]而不是my_param来访问本地,如果未定义参数而不是错误地将其返回nil,例如described in this documentation。另一种选择是在访问defined?(my_param)之前使用它。