0

我有 3 个表,我试图找出我需要的关联,以便在视图中循环它们并输出所有必要的字段:

表:博客

  • ID
  • 姓名

表:blog_comment_type

  • ID
  • comment_type_id(这是 comment_type 表中的匹配 id)。

表:comment_type

  • ID
  • 姓名

我能够遍历 blog_comment_type 并获得我需要的所有内容,但我想要提取的一个缺失字段是 comment_type 表中的“名称”字段。

<% @blog.blog_comment_types.each do |blog_comment_type| %>
   <tr>
      <td><%= blog_comment_type.comment_type_id %></td>
      <td>Comment name goes here</td>
  </tr>
4

2 回答 2

0

看起来你在那里遗漏了一些东西。的结构blog_commment_types应该包括blog_idand comment_type_id,导致:

class BlogCommentType < ActiveRecord::Base
  belongs_to :blog
  belongs_to :comment_type
end

然后你可以在:through关联中使用它:

class Blog < ActiveRecord::Base
  has_many :blog_comment_types
  has_many :comment_types,
    :through => :blog_comment_types
end

然后就这么简单:

<% @blog.comment_types.each do |comment_type| %>
  <tr>
    <td><%= comment_type.id %></td>
    <td><%= comment_type.name %></td>
  </tr>
<% end %>
于 2013-05-31T17:14:26.863 回答
0

视图位应该很简单:

blog_comment_type.comment_type.name

然而:

我猜你已经尝试过了,但它不起作用。查看表格,最可能的原因是您的模型中没有建立blogsblog_comment_types和之间的关联。comment_types简而言之:

  • 看起来 和 之间存在多对一关系blog_comment_typeblog但没有负责这种关系的列。除非我误解了,否则你需要一个blog_id字段blog_comment_type

  • 这使得table 只是和blog_comment_type之间的多对多连接器。comment_typeblog

因此,在您的博客模型中,您需要:

has_many :blog_comment_types
has_many :comment_types, through: :blog_comment_type

在您想要的 blog_comment_type 模型中

belongs_to :blog
belongs_to :comment_type

在你想要的 comment_type 模型中

has_many :blog_comment_types
has_many :blogs, through: :blog_comment_type

完成后,您可以将其放在您的视图中:

<%- @blog.comment_types.each do |comment_type| %>
  <tr>
    <td><%= comment_type.id %></td>
    <td><%= comment_type.name %></td>
  </tr>
<% end %>

请注意,您在comment_type上面显示的是 ID,而不是blog_comment_typeID。这些不同的,但我很确定你想要comment_type idblog_comment_type表只是博客和评论类型之间的连接,并且该 ID 字段实际上没有太多外部价值。

希望这可以帮助

于 2013-05-31T17:25:56.540 回答