gpt4 book ai didi

ruby-on-rails - Rails 4 中的多态发布

转载 作者:行者123 更新时间:2023-12-04 06:06:13 24 4
gpt4 key购买 nike

我想在实现之前运行过去的 SO。

我有用户,它们都可以创建帖子并且它们都可以接收帖子 .

我在想我需要像这样的 Posts 模型上的 2 个多态关联:

postedwall(posted 显示模型可以创建帖子,wall shows 模型可以接收帖子)

所以用户和组都应该:

has_many :posts, :as => :posted
has_many :posts, :as => :wall

和 Post 应该有

belongs_to :posted, :polymorphic => true
belongs_to :wall, :polymorphic => true

此外,我是否应该使用我在 Rails 多态性中看到的“可行”约定? 可邮寄可贴墙将 User.wall 用于他们的墙,将 User.posted 用于记录他们自己的帖子似乎更具可读性。 (我什至可以将 wall 更改为 recieved?)

谢谢

最佳答案

多态

我认为从本质上讲,您会得到 Polymorphic association困惑:

enter image description here

它旨在提供将不同模型关联到单个模型的能力;例如,如果您有以下内容:

#app/models/user.rb
Class User < ActiveRecord::Base
has_many :tables, as: :bookable
end

#app/models/admin.rb
Class Admin < ActiveRecord::Base
has_many :parties, as: :bookable
end

#app/models/restaurant.rb
Class Restaurant < ActiveRecord::Base
belongs_to :bookable, polymorphic: true
end

--

单表继承

您正试图从一个模型中多次关联同一个模型。虽然这没关系,但我猜你真的在寻找 STI :

#app/models/user.rb
Class User < ActiveRecord::Base
has_many :wall_posts, class_name: "User::WallPost"
has_many :posts, class_name: "User::Post"
end

#app/models/post.rb
Class Post < ActiveRecord::Base
belongs_to :user
end

#app/models/user/wall_post.rb
Class User::WallPost < Post
end

#app/models/user/post.rb
Class User::Post < Post
end

这将允许您执行以下操作:

@user = User.find 1
@user.wall_posts.each do |post|
post.name
end

关于ruby-on-rails - Rails 4 中的多态发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25138549/

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