我在这方面看到了几个问题,但一直无法解决......
我正在尝试在渲染部分时传递参数(类似于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' %>
所以我在渲染中渲染它。
答案 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)
之前使用它。