为什么更新属性不起作用?如果它不应该在模型级别使用,那么我可以使用什么来完成我在下面尝试完成的任务?
class Question < ActiveRecord::Base
attr_accessible :body, :title
def getNewTitle qid
if qid.is_a? Integer
"new question title"
end
end
# should only have to run it once
def updateTitles
Question.all.each do |q|
begin
newTitle = getNewTitle q.id
if newTitle
q = Question.find(q.id)
q.update_attribute(:title => newTitle)
end
rescue
puts "======================error======================"
end
end
end
end
答案 0 :(得分:3)
update_attribute
有两个参数。属性名称和值
q.update_attribute(:title, newTitle)
您拥有的是update_attributes
q.update_attributes(:title => newTitle)
rails约定是使用下划线而不是camelCase来获取方法名称和变量名称
例如,new_title, update_titles
答案 1 :(得分:0)
正如Vimsha所说,update_attribute
有两个论点。
但冒着被投票的风险,我会提供另一种选择 - 使用update
。 update_attribute
绕过验证,使用update
将确保您的更改在保存之前通过验证。
例如:
Question.all.each do |q|
begin
newTitle = getNewTitle q.id
if newTitle
Question.update(q.id, title: newTitle)
end
rescue
puts "======================error======================"
end
end
API参考
适用于update
和update_attribute