13

我已经看到了一些关于此的问题,但一直无法解决...

我试图在渲染部分时传递参数(类似于 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' %>

所以我在渲染中渲染它。

4

5 回答 5

20

试试这个:

<%= render :partial => '/memory_books/new', :locals => {:fbookupload => "yes"} %>
于 2012-07-01T16:26:35.530 回答
17

将其从评论中删除以供后代使用。这个语法是正确的:

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

但是,如果在没有指定局部变量的情况下渲染相同的局部变量,例如

render '/memory_books/new'

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

render 'my_partial', var1: 'qq', var2: 'qqq'

如果只发生一次就会起作用。但是如果代码中的其他地方有类似的东西

render 'my_partial', var1: 'qq'

然后var2将变得不可用。去搞清楚 ...

于 2013-11-17T14:11:42.170 回答
1

按照自己的方式进行:

在主视图中:

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

在部分:

<%= fbookupload %>

第二个选项:

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

于 2012-07-01T16:42:42.487 回答
1

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

但是如果你需要使用params[:fbookupload]', u can replace it withparams[:fbookupload] || fbookupload',并在局部哈希中传递 fbookupload。

于 2012-07-01T16:47:34.277 回答
1

render可以带或不带partial参数调用,这两种形式之间的差异似乎有些混乱。

以下两个是等价的:

<%= 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这将为您提供,如本文档中所述。另一种选择是在访问它之前使用。nildefined?(my_param)

于 2020-11-06T16:23:24.310 回答