ruby-on-rails Rails从多态belongs_to对象构建关联

xa9qqrwz  于 2022-11-19  发布在  Ruby
关注(0)|答案(3)|浏览(168)

我有一个多态关系如下:

class Profile
  belongs_to :practice, polymorphic: :true
end

class ForeclosurePractice
  has_one :profile, as: :practice
end

我想基于我拥有的概要文件构建一个练习对象,但不幸的是练习返回nil:

p = Profile.new
p.practice # => nil

如何从配置文件对象构建练习对象?

xkrw2x1b

xkrw2x1b1#

p.build_practice无法工作,因为build_other method is not generated for polymorphic associations
如果你想要一种动态创建示例的方法,例如基于表单中选择的类名,你可以尝试使用safe_constantize -简单的例子:

p.practice = params[:practice_type].safe_constantize.new
py49o6xq

py49o6xq2#

基于Matt的答案,我将调整build_practice方法,如下所示:
我遇到了一个问题,即更新多态practice会创建一个新对象(因为build_practice总是调用. new)。

class Profile < ApplicationRecord
  def build_practice(params)
    if practice.present?
      practice.assign_attributes(params)
    else
      self.practice = practice_type.classify.constantize.new(params)
    end
  end

首先,我只使用了第二部分,并会想知道它会创建一个新的记录与每一个更新。

u5rb5r59

u5rb5r593#

您需要显式构建关联:

p = Profile.new
p.build_practice

请参阅:http://apidock.com/rails/v4.0.2/ActiveRecord/Associations/ClassMethods/belongs_to

相关问题