gpt4 book ai didi

ruby-on-rails - 使用 validates_associated 在多态关联中进行验证

转载 作者:行者123 更新时间:2023-12-02 03:40:37 25 4
gpt4 key购买 nike

我有这些模型:Post、TextPost 和 PhotoPost,我使用多态关联。

可以找到这三个型号here或看下面。

post.rb

class Post < ActiveRecord::Base
belongs_to :user
default_scope { order ("created_at DESC")}
belongs_to :content, polymorphic: true
has_reputation :votes, source: :user, aggregated_by: :sum
end

photo_post.rb

class PhotoPost < ActiveRecord::Base
has_attached_file :image, styles: {
post: "200x200>"
}
end

text_post.rb

class TextPost < ActiveRecord::Base
attr_accessible :body
end

我想要的是在用户分别提交 text_post 或 photo_post 时验证 :body 和 :image 的存在。到目前为止,我发现我必须使用 validates_associated .完整的项目可以在 Github 上找到。 .

我进行了很多实验以了解 validates_associated 的工作原理并在线搜索示例,但我不知道发生了什么。

(如果您需要更多信息,请告诉我)非常感谢任何帮助/指导。

最佳答案

我认为对于初学者来说,这 3 个模型之间需要某种形式的关联。您有 PostPhotoPostTextPost。因为一个帖子可以有一个 type 的帖子。还要记住 type 在 rails 中是一个保留字。但无论如何,你的模型应该如下所示:

class Post< ActiveRecord::Base
belongs_to :postable, polymorphic: true
end

class PhotoPost < ActiveRecord::Base
has_many :posts, as: :postable
end

class TextPost < ActiveRecord::Base
has_many :posts, as: :postable
end

从查看您提供的代码片段来看,它没有显示任何多态关联设置。关于验证多态关联的关联,您可能需要阅读此答案:Validate presence of polymorphic parent .此外可能还想阅读这篇文章:Validating a polymorphic association for a new record . validate_associated 验证助手的目的只是确保两条记录之间的关联有效,或者正如他们所说的那样有效。在您的情况下,如果您要使用该验证助手。这不是您想要的,因为所做的只是验证两个模型之间的关联。请参阅我提供的第二个链接,这就是我相信您所追求的。

同样在您的 Controller 中,您需要建立模型之间的关系。所以在你的 Controller 中 我认为 你可以在你的 new 操作中有这样的东西:

  def new
@Post = Postfind(params[:id])
@PhotoPost = @post.photoposts.build
@TextPost = @post.textposts.build
end

关于ruby-on-rails - 使用 validates_associated 在多态关联中进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20305917/

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