如何使用集合的局部布局?轨道

时间:2011-02-27 04:30:16

标签: ruby-on-rails layout collections partials

我在打电话:

render @users, :layout => "homepage"

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

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

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

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

5 个答案:

答案 0 :(得分:3)

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

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

或者说:layout选项仅在渲染单个资源而不是集合时有效吗?

答案 1 :(得分:2)

截至2019年9月,在Rails 6中,这是我们的工作方式:

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

使用别名:

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

希望这对将来的搜索者以及将来的我都有帮助。

答案 2 :(得分:1)

尝试添加:as => :user以从视图中呈现部分:

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

答案 3 :(得分:0)

您应该执行类似

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

不确定:layout选项,但你必须传递@users thro:collection

希望它有所帮助!

答案 4 :(得分:0)

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

render