0

私は2つのモデルを持っています、AそしてBどこでA has_many B

モデルにはA、関連するすべてのBオブジェクトをループし、各オブジェクトのデータベースフィールドを更新するパブリックメソッドがあります。メソッドをB入れてループだけを実行したいのAですが、正しく保存されていないようです。このアプローチに何か問題がありますか?

メソッドの例を次に示します。

def update_fields # A Method
  self.b.each do |b|
    b.b_method
  end
end

def b_method # B Method
  self.field = '5'
  self.save
end

このタイプのコードを実行すると、データベースには何も保存されず、出力は更新されません。

どうすればこの種のことを達成できますか?または、フィールドAを処理している場合でも、すべてのロジックをコントローラーに含める必要がありますか?B

4

3 に答える 3

0

update_attributesを使用してみてください

def update_fields
  b.each { |x| x.update_attributes(field: "5") }
end

または

def b_method
  update_attributes(field: "5")
end
于 2013-01-20T20:18:31.607 に答える
0

abelongs_to bの場合、aにはbが1つしかないため、aメソッドで複数のbを反復処理しようとしても意味がありません。

編集

「自己」は必要ありません。インスタントメソッドを呼び出す場合。selfは、クラスメソッドを宣言するために使用されます。

しかし、私を最も混乱させるのは、モデルに何かを保存しようとしているということです。それはコントローラーに属しています!

于 2013-01-20T20:08:10.423 に答える
0

検証で問題が発生したため、一般的なアプローチが機能しました。

于 2013-02-15T13:44:54.243 に答える