我在打电话:
render @users, :layout => "homepage"
因为我想为主页(views / users / _homepage.html.erb)使用自定义布局包装用户的默认部分(views / _user.html.erb)。
但是,当我这样做时,我在user.name方法上得到了NoMethodError。
由于某种原因,似乎用户变量未在用户部分内正确初始化。
事实证明,经过一些测试,主页部分甚至没有被调用,它直接向用户提供部分....
答案 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