无法设置ActiveRecord多对多关系

时间:2015-05-21 18:29:08

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

我在使用Rails应用程序中获得多对多关系时遇到了一些困难。我正在运行Ruby 2.2.2p95和Rails 4.2.0。

NoMethodError: undefined method `each' for #<Topic id: 1>
seeds.rb:63:in `<top (required)>'

我的视频模型:

class Video < ActiveRecord::Base
    has_and_belongs_to_many :topic
end

主题模型:

class Topic < ActiveRecord::Base
    has_and_belongs_to_many :video
end

联接表迁移:

class TopicsVideos < ActiveRecord::Migration
  def up
    create_table :topics_videos, id: false do |t|
      t.belongs_to :topic_id, index: true
      t.belongs_to :video_id, index: true
    end
  end
  def down
    drop_table :topics_videos
  end
end

错误发生在db播种机:

62 | @topicTest= Topic.create!(title: 'Test')
63 | Video.create!(title: 'Test', topic: @topicTest)

我仍然是Rails的新手,来自PHP,现在这个让我很难过。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您需要复制关系模型,如下所示:

视频模型:

class Video < ActiveRecord::Base
    has_and_belongs_to_many :topics
end

主题模型:

class Topic < ActiveRecord::Base
    has_and_belongs_to_many :videos
end

答案 1 :(得分:1)

首先,has_and_belongs_to_many个关联名称应为复数。

视频模型:

class Video < ActiveRecord::Base
    has_and_belongs_to_many :topics
end

主题模型:

class Topic < ActiveRecord::Base
    has_and_belongs_to_many :videos
end

然后,您可以使用create

添加的has_and_belongs_to_many方法
@topicTest= Topic.create!(title: 'Test')
@topicTest.videos.create!(title: 'Test')

或者

@topicTest= Topic.create!(title: 'Test')
@topicNew= Topic.create!(title: 'New')

video = Video.create!(title: 'Test')
@topicTest.videos << video
@topicNew.videos << video

有关详细信息,请参阅HABTM section in Rails Guides