0

私は3つのテーブルを持っており、ビューでそれらをループして必要なすべてのフィールドを出力するために必要な関連付けを見つけようとしています:

表: ブログ

  • ID
  • 名前

tbl: blog_comment_type

  • ID
  • comment_type_id (これは、comment_type テーブル内の一致する ID です)。

Tbl: コメントの種類

  • ID
  • 名前

blog_comment_type をループして必要なものをすべて取得することはできますが、取得したい欠落しているフィールドの 1 つは、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>
4

2 に答える 2

0

ビュー ビットは単純である必要があります。

blog_comment_type.comment_type.name

でも:

あなたはそれを試したと思いますが、うまくいきません。表を見ると、最も可能性の高い理由は、blogsblog_comment_types、およびの間の関連付けがcomment_typesモデルで確立されていないことです。要するに:

  • blog_comment_typeと の間に多対 1 の関係があるように見えますがblog、この関係を担当する列はありません。私が誤解していない限り、blog_idフィールドが必要ですblog_comment_type

  • これにより、blog_comment_typeテーブルは と の間の多対多のコネクタにcomment_typeなりblogます。

したがって、ブログ モデルでは次のようにします。

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_typeID ではなく、上記の ID を表示していることに注意してくださいblog_comment_type。これら異なりますが、あなたが望むと確信していますcomment_type idblog_comment_typetable はブログとコメント タイプの間の単なる接続であり、その ID フィールドには実際にはあまり外部的な価値はありません。

お役に立てれば

于 2013-05-31T17:25:56.540 に答える