我花了一个半小时来解决我的应用,试图找出原因
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
?
答案 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