0

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

我有一个名为 USERS 的简单表,其中有 :name 和 :email 属性。

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

  1. User.find_by(:id => 1).update_attribute email, "sample@foo.bar" <- 好的
  2. User.find_by(:id => 1).update_attributes :email => "sample@foo.bar" <- 这对我来说是假的

有没有办法通过以下方式更新它:

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

3 回答 3

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")
于 2013-05-04T10:51:03.050 回答
0

您可以简单地通过 User.find(:id=>1).update_attribute(:email=>'sample@foo.bar') 更新记录,因为 update_attributes 用于更新所有属性。

于 2013-05-04T10:47:03.243 回答
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 
于 2013-05-04T16:14:07.453 回答