Rails:使用has_many:通过关联显示对象名称

时间:2013-07-01 01:56:27

标签: ruby-on-rails ruby ruby-on-rails-3

我有三个模型(如下所列):用户,主题和名为Publications的联接。

我成功列出了所有用户的出版物,我正在展示出版物的user_id和thread_id。

我不想列出发布的信息,而是使用每个发布的thread_id显示每个发布的线程名称。

以下是我的用户模型:

class User < ActiveRecord::Base

    devise :database_authenticatable, :registerable, :confirmable,
           :recoverable, :rememberable, :trackable, :validatable

    attr_accessible :email, :password, :password_confirmation, 
                    :remember_me, :username, :profile_image, 
                    :first_name, :last_name

    has_many :publications
    has_many :threads, :through => :publications

end

以下是我的出版物模型:

class Publication < ActiveRecord::Base
  attr_accessible :thread_id, :user_id
  belongs_to :thread
  belongs_to :user
end

以下是我的主题模型:

class Thread < ActiveRecord::Base
  attr_accessible :description, :name, :tag_list, :thumbnail_image, :status, :thread_type, :subtitle, :summary

  has_one :publication
  has_one :user, :through => :publication

end

下面是我的#index操作,在我的threads_controller.rb中:

def index
  @user = current_user
  @threads = @user.threads.all
  @publications = @user.publications.all
end

以下是我的索引视图中的代码,其中列出了所有用户的出版物:

%table
  %tr
    %th Publication
    %th User
    %th Created at

  - @publication.each do |publication|
    %tr
      %td= publication.thread_id
      %td= publication.user_id
      %td= publication.created_at

1 个答案:

答案 0 :(得分:1)

请使用关联关系表。

%table
  %tr
    %th Publication
    %th User
    %th Created at

  - @publication.each do |publication|
    %tr
      %td= publication.thread.name
      %td= publication.user.username
      %td= publication.created_at