gpt4 book ai didi

ruby-on-rails - validates_associated 验证两个模型之间的关联

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:51 26 4
gpt4 key购买 nike

我有两个模型 Post 模型和 Comment 模型。首先,如果创建一个帖子,它的帖子 ID 为 1,然后在创建评论时,我可以使用等于 1 的 post_id 与帖子关联,但是如果我创建一个帖子 ID 为 2 的评论不存在它仍然会继续并创建评论,但 ID 为 'nil'..我想确保只有在相应的 post_id 时才会创建评论存在。

class Post < ActiveRecord::Base
has_many :comments, dependent: destroy
end

class Comment < ActiveRecord::Base
belongs_to :post
validates_associated: post
end

根据我的理解,validates_associated 在创建评论之前检查 post 模型中的验证是否通过。如果我错了,请澄清一下,对于上述情况,什么是合适的解决方案?

最佳答案

首先,在这里设置关联 b/w Post-Comment 的首选方式是:

def new
@product = Product.first
@comment = @product.comments.build
end

def create
@product = Product.find(params[:comment][:post_id])
@comment = @product.comments.create(comment_params)
end

对于您的特定场景,我假设 post_id 通过某种形式或其他方式进入参数,然后您希望仅在具有该特定 post_id 的帖子时创建评​​论 存在。这可以通过在 Comment 模型中添加以下内容来完成:

validates :post, presence: true, allow_blank: false

validate :post_presence, on: :create
def post_presence
errors.add(:post_id, "Post doesn't exist") unless Post.find(post_id).present?
end

您甚至可以在 Controller 端使用 before_action/before_filter 做同样的事情钩子(Hook)。

关于ruby-on-rails - validates_associated 验证两个模型之间的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23424753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com