2016-03-10 5 views
2

У меня есть пользовательская таблица после создания пользователя. Я хочу отредактировать один атрибут, используя приведенный ниже код. Это мое мнение пользователя Редактирование:Обновление одного атрибута для пользователя

<h1>Please select below</h1> 

<%= form_for @user do |f| %> 

    <div class="form-group"> 
    <%= f.label :extra_activity %> 
    <%= f.select(:extra_activity, [['P_Act', 1],['Ph_Act', 2], ['C_Act', 3]], class: 'form-control', required: true) %></br> 
    </div> 

    <%= f.submit 'Submit', class: 'btn btn-primary btn-lg' %> 
<% end %> 

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

def edit 
    @user = User.find(params[:id]) 
    @users = User.all 
    @user_id = params[:user_id] 
end 

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
     redirect_to new_user_activity_path(@user) 
    else 
     redirect_to home_path 
    end 
end 

user_params перечислены ниже:

def user_params 
    params.require(:user).permit(:first_name, :surname, :previous_award, :chosen_award, :email, :password, :password_confirmation, :extra_activity) 
    end 

Когда я первоначально создайте пользователя, :extra_activity настроено на 0. Когда пользователь нажимает кнопку отправки в форме редактирования, ничего не происходит, пользователь перенаправляется на home_path. Мне просто нужно обновить атрибут :extra_activity пользователя до того, что они выбрали в форме. Может ли кто-нибудь предположить, где я здесь ошибся? Не знаю, как сохранить выбранный номер, как обновленное значение для :extra_activity

UPDATE:

class User < ActiveRecord::Base 
    has_many :activities, dependent: :destroy 
    has_many :weeks, dependent: :destroy 
    authenticates_with_sorcery! 
    validates :password, length: { minimum: 3 } 
    validates :password, confirmation: true 
    validates :email, uniqueness: true, email_format: { message: 'has invalid format' } 
end 
+0

Можете ли вы опубликовать хеш params, который проходит? – toddmetheny

+0

Я не уверен, что вы подразумеваете под параметром hash - где я могу это найти? – Jarvey

+0

в вашем действии обновления выполните: p params.inspect получите все, что возвращается из журналов. – toddmetheny

ответ

3

После прочтения ваших комментариев и проверить обновления, я думаю, решение добавить:

validates :password, length: { minimum: 3 }, if: :password

Пароль, скорее всего, сохранен в хешированной форме, а не в столбце password. Поэтому, если вы перезагрузите пользователя, атрибут не будет установлен. Подтверждение должно быть: ЕСЛИ пароль установлен, а затем убедитесь, что он имеет длину не менее 3 (что довольно коротко).

Вы должны убедиться, что сохраненный пароль не изменяется при обновлении пользователя через этот контроллер.

 Смежные вопросы

  • Нет связанных вопросов^_^