rails update_attributes - PullRequest
       21

rails update_attributes

2 голосов
/ 07 января 2012

Моя модель имеет

validates :password, :presence => true,
                                :confirmation => true,
                                :length => {:within => 6..40}

и мое действие по обновлению на контроллере пользователя:

def update
        @user = User.find(params[:id])
        if @user.update_attributes(params[:user])
            flash[:success] = "Profile updated."
            redirect_to @user
        else
            @title = "Edit user"
            render 'edit'
        end
    end

мой вид редактирования

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', :object => @user.errors%>
<div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
</div>
<div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
</div>
<div class="field">
    <%= f.label :password %> <br />
    <%= f.password_field :password %>
</div>
<div class="field">
    <%= f.label :password_confirmation, "Confirmation" %> <br />
    <%= f.password_field :password_confirmation %>
</div>
<div class="actions">
    <%= f.submit "Update" %>
</div>

Проблема в том, что я хотел бы обновлять только определенные атрибуты модели, а не вводить пароль каждый раз. Если я не введу пароль (и подтверждение), я получу ошибку проверки)

Как мне исправить ситуацию?

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Попробуйте следующее правило проверки

проверяет: пароль,: наличие => истина,: если => лямбда {new_record? || ! Password.nil? }

0 голосов
/ 07 января 2012

Вы можете использовать attr_protected, чтобы исключить некоторые поля из update_attributes. См. документ . Еще лучшим способом является использование attr_accessible для внесения в белый список атрибутов, которые могут быть обновлены при массовом назначении.

...