Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails,如何创建、编辑和保存由相关对象组合而成的属性?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

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
您是否有不接受答案的个人政策?如果是这样的话,那就糟糕了。