2013-08-25 69 views
1

我刚刚在轨道上研究红宝石,我想在创建适当的关联方面有所帮助。 我有这些模型:即使父母不存在,Ruby on Rails也会创建孩子?

评论:

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 

的事情是,当我创建了一个评论,我进入一个Stammr_post_id那并不是”如果存在,rails仍然认为它是有效的。这不是因为评论属于Stammr_post而无效吗?在发表评论之前,stammr_post应该首先存在。我该如何解决这个问题?它应该是自动的吗?我在某处做了一个错字吗?或者我需要为此做手动验证?对不起,我对Ruby on Rails有点新鲜。我是一位前Grails开发人员,我习惯于自动关联。 @ _ @

回答

1

您可以验证关联的belongs_to对象(stammr_post)而不是数据库列(stammr_post_id)。

class Comment < ActiveRecord::Base 
    belongs_to :stammr_post 
    validates :stammr_post, :content, presence: true 
end 
+0

伙计。有效! :D非常感谢。 :*我现在可以吻你。大声笑 – joannaSmith12

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 
相关问题