3

我打电话给:

render @users, :layout => "homepage"

因为我想用仅用于主页的自定义布局(views/users/_homepage.html.erb)包装用户的默认部分(views/_user.html.erb)。

但是,当我这样做时,我在 user.name 方法上得到 NoMethodError 。

由于某种原因,用户变量似乎没有在用户部分中正确初始化。

事实证明,经过一些测试,主页部分甚至没有被调用,它直接进入用户部分....

4

5 回答 5

3

这不是我想要的解决方案,我相信实际上可能有一种方法可以通过调用渲染来完成这项工作,但这就是给我正确输出的原因:

@users.each do |user|
  render :partial => "users/user",
         :layout => "users/homepage",
         :locals => { :user => user }
end

还是 :layout 选项仅在呈现单个资源而不是集合时才有效?

于 2011-02-28T04:58:30.620 回答
2

截至 2019 年 9 月,在 Rails 6 中,我们是这样做的:

<%= render partial: 'homepage_user_list_entry', collection: @users %>

使用别名:

<%= render partial: 'homepage_user_list_entry', collection: @banned_users, as: :user %>

希望这对未来的搜索者有帮助,对我也有帮助。

于 2019-09-26T03:14:52.790 回答
1

尝试添加:as => :user以从视图中渲染部分内容:

<%= render :collection => @users, :as => :user, :partial => 'users/user_short_form', %>

于 2013-01-01T01:29:16.147 回答
0

你应该做类似的事情

<%= render 'homepage', :collection => @users, :layout => 'homepage' %>

不确定 :layout 选项,但您必须通过 @users thro :collection

希望能帮助到你!

于 2011-02-27T05:03:57.673 回答
0

不确定这是否是 Rails 的新增功能,但在 Rails 4.2.1 中,我可以将我的集合传递给以下partial参数render

render partial: @users, layout: "homepage"
于 2017-12-18T04:21:41.500 回答