Ruby on rails Rails,如何创建、编辑和保存由相关对象组合而成的属性?
假设我有一个Ruby on rails Rails,如何创建、编辑和保存由相关对象组合而成的属性?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,假设我有一个Foo模型。一个Foo有许多Bar条形图存储值。Foo将多个Bar对象存储为一个combo对象 例如: f = Foo.find(2) f.combo # combo is essentially Bar.find_by(foo: f).pluck(:value).join(" ") # I want to be able to easily retrieve (like above) # create/edit/update f.combo = "moo cow" # all re
Foo
模型。一个Foo
有许多Bar
<代码>条形图存储值
。Foo
将多个Bar
对象存储为一个combo
对象
例如:
f = Foo.find(2)
f.combo
# combo is essentially Bar.find_by(foo: f).pluck(:value).join(" ")
# I want to be able to easily retrieve (like above)
# create/edit/update
f.combo = "moo cow"
# all related existing Bar objects should be updated,
# and new additions should be created,
# and no longer relevant ones should be deleted
f.save
# delete
f.combo = nil
# all related Bar objects should be deleted
f.save
有没有一种rails方法可以轻松地执行上述逻辑?这不是更新关联值的常用方法,因此目前还没有标准的方法。然而,根据您的实际需要编写代码并不是那么困难
class Foo < ActiveRecord::Base
attr_accessor :combo_values, :combo_set
after_save :update_combo_values
def combo=(args)
@combo_values = args
@combo_set = true
end
def update_combo_values
return unless @combo_set
self.bars.destroy_all
if @combo_values
@combo_values.split(' ').each do |arg|
bars.create! value: arg
end
@combo_values = nil
@combo_set = false
end
end
end
class Foo
您是否有不接受答案的个人政策?如果是这样的话,那就糟糕了。