即使父项不存在,Ruby on Rails也会创建子项?

时间:2013-08-25 09:20:27

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

我今天刚刚在轨道上研究了红宝石,我想在创建适当的关联方面提供一些帮助。 我有这些模型:

注释:

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开发人员,我习惯了自动关联的事情。 @ _ @

2 个答案:

答案 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