我有一个用户和公司类,我想重新使用用户部分作为渲染公司员工。
在CompaniesController
我有:
def staff
@company=Company.find(params[:id])
@users=@company.works_fors.paginate(page: params[:page], :per_page => 10)
@title=@company.name+" staff."
end
在我的staff.html.erb
模板中,我有:
<% if @users.any? %>
<ul class="users follow">
<%= render @users %>
</ul>
<%= will_paginate %>
<% end %>
这是works_fors/_works_for
部分:
<%= render :partial => 'user' %>
哪个渲染
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
<% if current_user.developer? && !current_user?(user) %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
</li>
但是,由于无法找到方法
,因此会在用户对象上引发错误未定义的局部变量或方法`user&#39;对于~~
我认为这是因为我从公司内部调用用户对象但是存在已定义的关系,或者我是否需要在公司中重新定义?
答案 0 :(得分:3)
很难说,但您在控制器中调用@users
的内容实际上不是User
集合,而是WorkFor
集合。
@users = @company.works_fors...
你的意思是:
@works_fors = @company.works_fors...
这意味着staff.html.erb
正在使用works_for
集合。因此,您应该重命名模板中的变量以避免混淆。
# staff.html.erb
<% if @works_fors.any? %>
<ul class="users follow">
<%= render @works_fors %>
</ul>
<%= will_paginate @works_fors %>
<% end %>
现在我们知道我们正在渲染works_for
部分。因此,部分内部可以使用works_for
的实例。我们需要询问它的关联用户实例,并将其传递给render方法。
# works_fors/_works_for.html.erb
<%= render works_for.user %>
作为奖励,您可以通过预加载用户来保存自己的一些查询。
@works_fors = @company.works_fors.includes(:user)...