为什么update_attribute在这里不起作用

时间:2014-03-23 04:23:06

标签: ruby-on-rails ruby

为什么更新属性不起作用?如果它不应该在模型级别使用,那么我可以使用什么来完成我在下面尝试完成的任务?

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

2 个答案:

答案 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有两个论点。

但冒着被投票的风险,我会提供另一种选择 - 使用updateupdate_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参考 适用于updateupdate_attribute