- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道这方面有很多资源,但我很难将它们中的任何一个与我的情况联系起来,所以我希望有人能帮助我阐明它是如何工作的:
基本上我有一个模型 Action
,(每当一个用户做一些影响另一个用户的事情时创建它,例如评论他们的文章或对某人的照片投票),这些 Action 将是在用户仪表板页面中列出与他们相关的所有已发生的操作,就像流...有点像 Github 的“新闻提要”
我决定创建一个多态关联,这是我的模型的样子:
class Action < ActiveRecord::Base
belongs_to :instigator, :polymorphic => true
belongs_to :victim, :polymorphic => true
end
我使用了煽动者和受害者,因为任何人都可以创建这些行为,而这些行为又总是会影响另一个用户,这是我的用户
模型
class User < ActiveRecord::Base
has_many :actions, :as => :instigator
has_many :actions, :as => :victim
end
这就是我认为我出错的地方,因为最终我想要一个查询,当我运行类似User.find(1).actions
实际返回用户既是煽动者
又是受害者
的所有实例,我想我不能同时拥有这两个have_many
就在那里,因为像这样使用时我只会得到用户是 victim
的实例。
这是我的迁移:
create_table :actions do |t|
t.references :instigator, :polymorphic => true
t.references :victim, :polymorphic => true
t.string :action_performed
t.references :resource, :polymorphic => true
t.timestamps
end
感谢您的帮助,我总是喜欢 SO 社区提供的重要建议和帮助。
最佳答案
这让人想起经典的友谊模型问题。多态关联不是重点。
Rails 版本无关的解决方案:
class User < ActiveRecord::Base
has_many :instigator_actions, :class_name => "Action", :as => :instigator
has_many :victim_actions, :class_name => "Action", :as => :victim
has_many :actions, :finder_sql => '
SELECT a.*
FROM actions a
WHERE (a.instigator_type = "User" AND instigator_id = #{id}) OR
(a.victim_type = "User" AND victim_id = #{id})'
end
在创建操作时使用前两个关联之一创建它们。
u1.instigator_actions.create(:victim => u2)
或
u1.victim_actions.create(:instigator => u2)
同时,您可以使用 actions
关联获取与用户关联的操作列表。
u1.actions
关于ruby-on-rails - 帮助理解多态关联(rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648831/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!