如何从控制器中检索不同模型的属性?

时间:2009-04-21 03:12:48

标签: ruby-on-rails

我有一个显示的供应商控制器:

def show
@vendor = Vendor.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @vendor }
end
end

在我的评论视图中(供应商:has_many评论)

    <% if @vendor.reviews.empty? %>
        No Analyst Reports yet
    <% else %>
        <% for review in @vendor.reviews %>

            <%= review.user_id %>
            <%= review.summary %><br />
            <hr class="span-5" />

        <% end %>
    <% end %>

所以我基本上会针对特定供应商的所有评论进行'for'循环(这对我来说一直是一个棘手的概念,但似乎有效)。

所以:我想显示User.name和user.email。我知道每个相应评论的user_id是什么(review.user_id),但我不知道如何显示用户模型的值。

我认为使用find_by_id会起作用,但它无法识别用户。

帮助?

1 个答案:

答案 0 :(得分:1)

如果您在Review模型和User模型之间设置了:has_one关系,那么您只需使用review.user即可访问它。因此,您可以获得review.user.namereview.user.email等用户属性

请注意,如果您要检索许多子记录以进行循环,则可能需要使用find参数调用:include以减少查询次数。类似的东西:

Vendor.find(params[:id], :include => { :reviews => :user } )

有关详细信息,请参阅API docs for has_one