繁体   English   中英

在渲染中传递参数 - Rails 3

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM