如何添加到many_to_many关联

时间:2014-03-22 14:34:20

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

如何在杂志订阅中添加新读者?

基本上,我使用的是multi_to_many关联 - 我有一个读者模型,一个杂志模型和一个magazines_readers连接表。

create_table :magazines do |t|
t.string :title
t.datetime :created_at
t.datetime :updated_at
end
create_table :readers do |t|
t.string :name
t.datetime :created_at
t.datetime :updated_at
end
create_table :magazines_readers, :id => false do |t|
t.integer :magazine_id
t.integer :reader_id
end

现在,如果我做了类似的事情:

magazine = Magazine.create(:title => "The Ruby Language Journal")
matz = Reader.find_by_name("Matz")
magazine.readers << matz
matz.magazines.size # => 1

我可以将Matz添加到杂志订阅中,但如何在视图+控制器的rails中将matz添加到订阅中?

换句话说,在控制台中我可以添加matz - 但是如何在应用程序中完成?代码会是什么样的?它会在创作动作等......

请帮我解决这个问题,谢谢!

3 个答案:

答案 0 :(得分:3)

<强>模型

class Magazine&lt;的ActiveRecord ::基

   has_many :magazine_readers
   has_many :readers, through: :magazine_reader

class MagazineReader&lt;的ActiveRecord ::基

 belongs_to :magazine
 belongs_to :reader

class Reader&lt;的ActiveRecord ::基

 has_many :magazine_readers
 has_many :magazines, through: :magazine_reader

答案 1 :(得分:2)

你的模特应该是这样的

<强> magazine.rb

class Magazine < ActiveRecord::Base
   has_many :magazine_readers
   has_many :readers, through: :magazine_reader
end

<强> reader.rb

class Reader < ActiveRecord::Base
   has_many :magazine_readers
   has_many :magazines, through: :magazine_reader
end

magazine_reader.rb 文件是您的联接表。在此,您还可以添加其他属性

class MagazineReader < ActiveRecord::Base
   belongs_to :magazine
   belongs_to :reader
end

有关详细信息,请参阅此link

答案 2 :(得分:1)

你只需要这样做:

class Magazine < ActiveRecord::Base
  has_and_belongs_to_many :readers
end

class Reader < ActiveRecord::Base
  has_and_belongs_to_many :magazines
end

更多信息:http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association