Rails模型关联设置可以在视图中轻松呈现

时间:2013-05-31 17:00:52

标签: ruby-on-rails ruby associations model-associations

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

Tbl:博客

  • ID
  • 名称

tbl:blog_comment_type

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

Tbl:comment_type

  • ID
  • 名称

我可以遍历blog_comment_type并获得我需要的所有内容,但我想要提取的一个缺少的字段是comment_type表中的“name”字段。

<% @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>

2 个答案:

答案 0 :(得分:0)

看起来你在那里遗漏了一些东西。 blog_commment_types的结构应包含blog_idcomment_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 %>

答案 1 :(得分:0)

视图位应该很简单:

  

blog_comment_type.comment_type.name

但是:

我猜你已经尝试过&amp;它不起作用。查看表格,最可能的原因是您的模型中未建立blogsblog_comment_typescomment_types之间的关联。简而言之:

  • 看起来blog_comment_typeblog之间存在多对一关系,但没有专栏负责此关系。除非我误解,否则您需要blog_id

  • 中的blog_comment_type字段
  • 这使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_type ID。这些 不同,但我很确定你想要comment_type idblog_comment_type表只是blog&amp; amp;注释类型,该ID字段的外部值确实不多。

希望这有帮助