【问题标题】:Ruby on Rails creates child even if parent doesn't exist?即使父级不存在,Ruby on Rails 也会创建子级?
【发布时间】:2013-08-25 09:20:26
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    执行此操作的正确方法是通过父关联创建评论。这样您就可以利用该关联;

    所以不要这样做;

    @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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 老兄。有效! :D 非常感谢。 :* 我现在可以吻你。大声笑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      相关资源
      最近更新 更多