0

Fooモデルがいるとします。Foohas_many Bar。_ BarvalueFooは、複数のBarオブジェクトを 1 つのオブジェクトとして格納し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

上記のロジックを簡単に実行するレールの方法はありますか?

4

1 に答える 1

0

関連する値を更新するのは一般的な方法ではないため、これを行う標準的な方法はありません。ただし、実際に必要なものに応じて、それを回避するようにコーディングすることはそれほど難しくありません。

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
于 2013-11-08T00:55:03.103 に答える