为什么rails迁移包含belongs_to,但不包含has_many?

时间:2014-01-13 06:12:49

标签: ruby-on-rails

我花了一个半小时来解决我的应用,试图找出原因

User.articles

投掷错误。模型看起来没问题:

class User < ActiveRecord::Base
  has_secure_password
  has_many :articles
  validates :email, presence: true, uniqueness: true
  validates :name, presence: true, uniqueness: true
end

class Article < ActiveRecord::Base
  validates :title, presence: true, uniqueness: true
  validates :content, presence: true
  belongs_to :user  
  has_many :article_categories
  has_many :categories, through: :article_categories 
end

最后,问题是文章的迁移没有行

t.belongs_to :user

在此过程中,我还尝试将此行放在用户迁移

t.has_many :articles

但它犯了一个错误。

为什么迁移只需要关系的belongs_to方而不是has_many

2 个答案:

答案 0 :(得分:5)

迁移提供.belongs_to,因为它实际上定义了一个列,即链接表的外键。另一方面,has_many实际上并没有对表本身做任何事情;将它包含在迁移中绝对没有价值或效果。

答案 1 :(得分:0)

你的困惑在于你。迁移不必具有许多并且属于它,因为它已经在模型中定义。要使关系起作用,请生成一个将user_id(整数)列添加到Articles表的迁移。 即

rails generate migration add_user_id_to_articles
class AddUserIdToArticles < ActiveRecord::Migration
  def change
    add_column :articles, :user_id, :integer
  end
end