-2

Ruby テーブルの 1 つでいくつかのフィールドを初期化するのに役立つ簡単な方法を書きたいと思います。これは私がこれまで持っているものですが、うまくいきません。フィールド名の配列をこの関数に入力して、初期化全体を 1 つのループで実行できるようにしたいと考えています。

fields =["field1","field2","field3","field4"]
tasks = Task.all

tasks.each do |task|
    fields.each do |field|
        if task.field.nil?
            task.update_attribute :field => true
        end
    end
end
4

3 に答える 3

1

これが実際に Rails である場合は、ハッシュ アクセスを使用できます。

task[field] = true if task[field].nil?

save変更されたレコードは引き続き必要です。

代わりに使用することもできますtask.update_attribute(field, true): これはデータベースをすぐに更新しますが、変更された属性ごとにトランザクションを実行します。

于 2013-10-19T15:31:07.537 に答える
1

多分これはあなたが意味するものです:

fields = %w[field1 field2 field3 field4]
tasks = Task.all

tasks.each do |task|
  fields.each do |field|
    task.update_attribute :"#{field}" => true if task.send(field).nil?
  end
end
于 2013-10-19T15:28:54.277 に答える