2013-05-04 4 views
0

Я новичок в Rails, и я хочу знать, как я могу обновить мою базу данных (я хотел бы знать все возможные варианты для этого).Обновление базы данных, какие у меня параметры?

У меня есть простая таблица под названием USERS, где я получил: имя и: атрибуты электронной почты.

Как я прочитал, я могу обновить: электронную почту по:

  1. User.find_by(:id => 1).update_attribute email, "[email protected]" < - OK
  2. User.find_by(:id => 1).update_attributes :email => "[email protected]" < - это возвращение мне ложные

и есть ли способ, чтобы обновить по:

@foo = User.find_by(:id => 1) 
foo.email = "[email protected]" 
foo.save 
+0

в этой теме вы можете найти ответ [здесь] (http://stackoverflow.com/questions/2778522/rails-update-attribute-vs-update-attributes) – rony36

+0

btw 'foo.email' должно быть' @foo .email' и 'foo.save' должны быть' @ foo.save' – drhenner

ответ

0

Вы можете: просто обновите запись, User.find (: id => 1) .update_attribute (: email => '[email protected]') , поскольку update_attributes используется для обновления всех атрибутов.

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 = "[email protected]" 
@user.save 

# or update_attributes which can update multiple attributes at once: 
@user.update_attributes(email: "[email protected]", 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, "[email protected]") 
0

Привет, есть два способа обновить данные с помощью обновления ActiveRecord.

Первый подход был бы:

ex. user = User.find(1) 
    user.attributes = { 
     :email => "[email protected]" 
    } 
    user.save 

Второй подход был бы:

ex. 
    user = User.find(1) 
    user.update_attributes{:email => "[email protected]"} 

Вы также можете обновить с помощью "метода обновления" на вашем конкретном контроллере:

ex. 
def update 
    user = User.find(params[:user]) 
    user.update_attributes 
end 
Смежные вопросы