在视图中渲染rails模型关联

时间:2013-06-14 19:45:12

标签: ruby-on-rails

我有三张桌子:

blogs (id, name, description)

user_blogs (id, user_id, blog_id)

users (id, email, gender)

我正在遍历用户,我想显示他们所属的所有user_blog。在视图中执行此操作的最佳做​​法是什么?我已经有下面的代码了。现在,我想添加一个列,该列将显示基于user_blogs关联的blogs.name列表。

  <% @users.each do |user| %>
    <tr>
      <td><%= user.id %></td>
      <td><%= user.custom_id %></td>
      <td><%= user.email %></td>
    </tr>
  <% end %>

2 个答案:

答案 0 :(得分:0)

我认为以下内容可行:

  <% @users.each do |user| %>
    <tr>
    <td><%= user.id %></td>
    <td><%= user.custom_id %></td>
    <td><%= user.email %></td>
    <td>
      <ul>
        <% user.user_blogs.blog.each do |blog| %>
          <li><%= blog.name %></li>
        <% end %>
      </ul>
    </td>
    </tr>
  <$ end %>

但是(假设您的关联设置正确),如果您在User类中输入以下内容:

has_many :user_blogs
has_many :blogs, through: :user_blogs

你可以摆脱user_blogs,并在你的视图中使用以下内容。

  <% @users.each do |user| %>
    <tr>
    <td><%= user.id %></td>
    <td><%= user.custom_id %></td>
    <td><%= user.email %></td>
    <td>
      <ul>
        <% user.blogs.each do |blog| %>
          <li><%= blog.name %></li>
        <% end %>
      </ul>
    </td>
    </tr>
  <$ end %>

答案 1 :(得分:0)

我相信您的模型应如下所示,您可能不同意我的意见。但根据我的理解,User可以有多个Blogs,博客可以属于用户

  class Blogs < ActiveRecord::Base
     belongs_to :user 
     attr_accessible :id, :name, :description
    end 

    class User < ActiveRecord::Base

      attr_accessible :id, :email, :gender
      has_many :blogs
    end 

然后我相信你所提到的:

  

我想显示他们所属的所有user_blog

您可以在视图中执行以下操作:

 <% @users.each do |patient| %>
    <tr>
    <td><%= user.id %></td>
    <td><%= user.custom_id %></td>
    <td><%= user.email %></td>
    <td>
      <ul>
        <% user.blogs.each do |blog| %>
          <li><%= blog.name %></li>
        <% end %>
      </ul>
    </td>
    </tr>
  <% end %>