[英]Pass Parameters in render - Rails 3
我已经看到了一些关于此的问题,但一直无法解决...
我试图在渲染部分时传递一个参数(类似于 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" %>
正在由另一个页面呈现(帖子/显示)通过:
<%= render :partial => '/fbookphotos/show' %>
所以我在渲染中渲染它。
试试这个:
<%= render :partial => '/memory_books/new', :locals => {:fbookupload => "yes"} %>
把它从后人的评论中取出来。 这个语法是正确的:
render '/memory_books/new', fbookupload: "yes"
但是如果有一个引用来渲染相同的部分而不指定局部变量,例如
render '/memory_books/new'
然后fbookupload
变量变得不可用。 这同样适用于多个局部变量,例如
render 'my_partial', var1: 'qq', var2: 'qqq'
如果只发生一次就会起作用。 但是如果代码中的其他地方有类似的东西
render 'my_partial', var1: 'qq'
那么var2
将变得不可用。 去搞清楚 ...
params 只是请求参数,所以如果你想在 params 中传递它,你必须将它添加到你的 url ?fbookupload=yes
或分配它params[:fbookupload] = "yes"
,但我认为这不是一个好主意。
但是如果你需要使用params[:fbookupload]', u can replace it with
params[:fbookupload] || params[:fbookupload]', u can replace it with
fbookupload',并在局部哈希中传递 fbookupload。
可以使用或不使用partial
参数来调用render
,并且这两种形式之间的差异似乎有些混乱。
下面两个是等价的:
<%= render "my_partial', my_param: true %>
和:
<%= render partial: "my_partial', locals: { my_param: true } %>
第一个是允许您省略partial:
的速记。 使用这个速记,局部变量也不会嵌套在locals:
。 这在文档中有很好的解释(参见“渲染默认情况”)。
在上述两种情况下,你将访问my_param
在部分直接与my_param
。
另一个令人困惑的来源是,如果您在某处渲染部分而不传递my_param
,则部分在尝试访问它时将失败。 为了解决这个问题,您可以使用local_assigns[:my_param]
而不是my_param
访问本地,如果未定义参数而不是错误,它将为您提供nil
,如本文档中所述。 另一种选择是在访问它之前使用defined?(my_param)
。
按照你的方式去做:
在主视图中:
<% fbookupload = "yes" %>
<%= render :partial => '/memory_books/new', :locals => {:fbookupload => fbookupload} %>
在部分:
<%= fbookupload %>
第二个选项:
理想情况下,在控制器中,否则在视图中,定义一个实例变量: @fbookupload = "yes"
。 然后它无处不在。 部分将是: <%= @fbookupload %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.