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

4

2 回答 2

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
于 2013-08-25T09:39:39.130 回答
1

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

class Comment < ActiveRecord::Base
  belongs_to :stammr_post
  validates :stammr_post, :content, presence: true
end
于 2013-08-25T09:28:01.993 回答