2013-10-19 64 views
-2

我想寫一個快速方法,可以幫助我初始化我的一個紅寶石表中的幾個字段。這是我迄今爲止的,但它不起作用。我希望能夠將一組字段名稱提供給該函數,以便我可以在一個循環中完成整個初始化。將字符串饋入Ruby循環

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 

回答

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 
1

如果這其實是Rails的,因爲它似乎是,你可以使用哈希訪問:

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

你仍然需要以save的修改記錄。

您可以改爲使用task.update_attribute(field, true):這將立即更新數據庫,但會爲每個修改後的屬性執行事務。

1

嘗試始終使用的查詢數最少的數據庫

fields = ["field1","field2","field3","field4"] 

fields.each do |field| 
    Task.where({field => nil}).update_all({field => true}) 
end