我今天刚刚在轨道上研究了红宝石,我想在创建适当的关联方面提供一些帮助。 我有这些模型:
注释:
class Comment < ActiveRecord::Base
belongs_to :stammr_post
validates :stammr_post_id, presence: true
validates :content, presence: true
end
发表:
class StammrPost < ActiveRecord::Base
has_many :comments, :dependent => :destroy
validates :content, presence: true
end
问题是,每当我创建一个Comment时,我输入一个不存在的Stammr_post_id,rails仍然认为它是有效的。因为评论属于Stammr_post而不应该是无效的吗? stammr_post应该先存在,然后才能发表评论。我该如何解决这个问题?它应该是自动的吗?我在某个地方打错了吗?或者我需要进行手动验证吗?对不起,我是Ruby on Rails的新手。我以前的Grails开发人员,我习惯了自动关联的事情。 @ _ @
答案 0 :(得分:2)
正确的方法是通过父母协会创建评论。这样你就可以利用这种关联;
所以不要这样做;
@comment = Comment.new(:stammr_post_id => 123)
@comment.save
这样做;
# Find the StammrPost first. You may want to replace params[:stammr_post_id]
# with your StammrPost id
@stammr_post = StammrPost.find(params[:stammr_post_id])
@comment = @stammr_post.comments.build()
@comment.save
答案 1 :(得分:1)
您可以验证关联的belongs_to
对象(stammr_post
)而不是数据库列(stammr_post_id
)。
class Comment < ActiveRecord::Base
belongs_to :stammr_post
validates :stammr_post, :content, presence: true
end