2011-02-27 27 views
2

我打电话:如何在集合中使用局部布局? Rails的

render @users, :layout => "homepage" 

,因为我想换只为主页(视图/用户/ _homepage.html自定义布局的默认部分用户(视图/ _user.html.erb)。 ERB)。

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

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

原来一些测试后,部分网页甚至没有得到调用,它直接将用户部分....

+0

哦,和间隔不会工作,因为我需要包装用户部分的一些布局代码,而不仅仅是把东西在每个用户之间。 – jakeonrails

+0

你从哪里调用这个渲染语句? –

+0

从主页控制器视图中调用索引。 – jakeonrails

回答

2

这不是我想要的解决方案,我相信有可能实际上是一种方法,使只使用一个电话来呈现这项工作,但是这是什么给了我正确的输出:

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

或者是它只有在渲染单个资源而不是集合时才能使用:layout选项?

+4

我只是在寻找一种方法来做同样的事情,你的方式似乎是现在唯一的方法。 http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html获取更多信息 - 如果你在底部检查,render_collection和render_partial是两种完全不同的方法。 – Andrey

0

你应该这样做

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

不知道关于:布局选项,但你必须通过@users thro:收集

希望它有帮助!

+0

我得到:未定义的局部变量或方法'用户' – jakeonrails

+0

可能,使用:作为选项罗伯特建议将与这个特定的建议。 – jakeonrails

1

尝试增加:as => :user渲染的部分从一个观点:

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

+1

阅读完文档后:as选项告诉Rails,您传递的参数作为参数,在本例中,@users将被命名为您所设置的任何内容:as,作为局部变量。 但我不认为这回答了原始问题,但在使用'render'方法时如何使用布局和集合。 – jakeonrails

0

不知道这是一个新的除了Rails的,但在Rails的4.2.1,我可以通过我收集到partial说法的render

render partial: @users, layout: "homepage"