如何获取子模型中的父对象 ID?嵌套形式
How can I get the parent object id inside the child model? Nested form
我有一个 Campaign 和一个 Material 模特。
class Campaign < ApplicationRecord
has_many :materials
accepts_nested_attributes_for :materials, reject_if: :all_blank, allow_destroy: true
end
和
class Material < ApplicationRecord
belongs_to :campaign
def code=(val)
new_code = val
suffixes = %w(.png .jpg .jpeg .gif .bmp)
urls = URI.extract(new_code, ['http', 'https'])
urls.each do |url|
new_code = new_code.gsub(url, "#{url}&var1=#{self.campaign.id}") unless url.ends_with? *suffixes #<--- (this is not working
end
write_attribute(:code, new_code)
end
end
Material有一个属性code,我想用link填充这个属性代码在创建时包含相关 广告系列 的 ID。
如何在 Material 模型中获取对象 Campaign?
更新
对不起,我没有解释清楚。在上面的 Material 模型中,我想获取父 ID 来填充代码属性,在 "create campaign process"
它是 belongs_to :campaign
而不是 :campaigns
...使用单数,因为每个 material 代表一个活动。
定义 belongs_to
和 has_many
会自动为您提供检索对象的方法。
my_material = Material.first
my_material.campaign # <- this gives you the campaign object
my_material.campaign_id # <- this gives you the campaign object's id
my_material.campaign.id
# ^ another way, slightly less efficient but more robust as you no longer need to know how the records are coupled
如果您在 create campaign
过程中并且您没有坚持活动,那么您没有可用的 ID,但您可以使用 after_save
来解决这个问题在活动中回调,可以使用必要的 ID 更新 materials 的 code
属性。
使用 before_save
回调和 self.campaign.id
在方法中获取父 ID 来处理我的用户输入的信息来解决它。
我有一个 Campaign 和一个 Material 模特。
class Campaign < ApplicationRecord
has_many :materials
accepts_nested_attributes_for :materials, reject_if: :all_blank, allow_destroy: true
end
和
class Material < ApplicationRecord
belongs_to :campaign
def code=(val)
new_code = val
suffixes = %w(.png .jpg .jpeg .gif .bmp)
urls = URI.extract(new_code, ['http', 'https'])
urls.each do |url|
new_code = new_code.gsub(url, "#{url}&var1=#{self.campaign.id}") unless url.ends_with? *suffixes #<--- (this is not working
end
write_attribute(:code, new_code)
end
end
Material有一个属性code,我想用link填充这个属性代码在创建时包含相关 广告系列 的 ID。
如何在 Material 模型中获取对象 Campaign?
更新
对不起,我没有解释清楚。在上面的 Material 模型中,我想获取父 ID 来填充代码属性,在 "create campaign process"
它是 belongs_to :campaign
而不是 :campaigns
...使用单数,因为每个 material 代表一个活动。
定义 belongs_to
和 has_many
会自动为您提供检索对象的方法。
my_material = Material.first
my_material.campaign # <- this gives you the campaign object
my_material.campaign_id # <- this gives you the campaign object's id
my_material.campaign.id
# ^ another way, slightly less efficient but more robust as you no longer need to know how the records are coupled
如果您在 create campaign
过程中并且您没有坚持活动,那么您没有可用的 ID,但您可以使用 after_save
来解决这个问题在活动中回调,可以使用必要的 ID 更新 materials 的 code
属性。
使用 before_save
回调和 self.campaign.id
在方法中获取父 ID 来处理我的用户输入的信息来解决它。