使用全局标识指定多态关联中的对象

时间:2015-12-04 08:45:48

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

我正在尝试使用全局ID来指定多态关联。但是,当我想通过关联引用对象时,找不到任何对象。

请考虑以下模型:

class Person < ActiveRecord::Base
  has_many :optionees, as: :entity
  belongs_to :company
end

class Optionee < ActiveRecord::Base
  belongs_to :entity, polymorphic: true
  belongs_to :option
end

如果我按照以下方式播种:

Person.create(fname: "John", lname:"Smith", email:"john.smith@email.com", telephone:"555-555-5555", street:"333 Street St", city:"Salt Lake City", state:"UT", zip:"99999", company_id:"1")

(给人1的身份证明) 和

Optionee.create total_shares: "332", exercise_price: "33.22" option_id: "1" entity_id: "gid://legal/Person/1"

(给予Optionee ID为1)

我无法使用以下命令查找此人:

Optionee.find(1).entity
相反,它给了我一个nill的结果。

我意识到做多态关联的传统方法是提供模型名称AND id;有什么东西我用全球ID来做这件​​事吗?非常感谢提前。

1 个答案:

答案 0 :(得分:-1)

您还需要在Optionee表中添加entity_type。如果person id为1,则entity_id等于1: -

Optionee.create total_shares: "332", exercise_price: "33.22" option_id: "1" entity_id: "1", entity_type: "Person"

或者您可以通过以下方式为选项表中的人创建记录: -

@person = Person.find(params[:id])
@person.optionees.create(params)

它将为person设置entity_id和entity_type。通过这样做,不需要显式设置entity_id和entity_type。