更新数据库,我有什么选择?

时间:2013-05-04 10:34:11

标签: ruby-on-rails

我是Rails的初学者,我想知道如何更新我的数据库?(我想知道所有可能的选项)。

我有一个名为USERS的简单表,我得到了:name和:email attributes。

在我阅读时,我可以通过以下方式更新我的电子邮件:

  1. User.find_by(:id => 1).update_attribute email, "sample@foo.bar"< - 确定
  2. User.find_by(:id => 1).update_attributes :email => "sample@foo.bar"< - 这回到我身边
  3. 有没有办法通过以下方式更新它:

    @foo = User.find_by(:id => 1)
    foo.email = "sample@foo.bar"
    foo.save
    

3 个答案:

答案 0 :(得分:1)

update_attribute跳过验证。因此,update_attributes正在返回false,因为它没有通过某些验证。仔细检查您的User模型验证,并确保在attr_accessible下添加了email

class User < ActiveRecord::Base
  attr_accessible :email, :name # etc
end

同样使用find,您不必指定属性,只需使用整数:

@user = User.find(24) # this will find a User with the ID of 24

@user.email = "sample@foo.bar"
@user.save

# or update_attributes which can update multiple attributes at once:
@user.update_attributes(email: "sample@foo.bar", name: "Bob")

# or update_attribute which skips validations and can only update 1
# attribute at a time. Only used for specific situations:
@user.update_attribute(:email, "sample@foo.bar")

答案 1 :(得分:0)

你可以简单地更新记录, User.find(:ID =→1).update_attribute(:电子邮件=&GT;'sample@foo.bar') 因为update_attributes用于更新所有属性。

答案 2 :(得分:0)

您好有两种方法可以使用ActiveRecord更新来更新数据。

第一种方法是:

ex. user = User.find(1)
    user.attributes = {
        :email => "sample@foo.bar"
     }
    user.save

第二种方法是:

ex. 
    user = User.find(1)
    user.update_attributes{:email => "sample@foo.bar"}

您还可以使用特定控制器上的“更新方法”进行更新:

ex.
 def update
  user = User.find(params[:user])
  user.update_attributes
 end