2016-03-10 37 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

你可以发布正在通过的参数哈希? – toddmetheny

+0

即时通讯不知道你是什么意思的params哈希 - 我在哪里可以找到这个? – Jarvey

+0

在更新操作中执行:p params.inspect 获取从日志中返回的任何内容。 – toddmetheny

回答

3

阅读您的意见和检查更新后,我想解决的办法是补充:

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

密码最有可能以散列形式存储,而不是在password列中。所以如果你重新加载用户的属性没有设置。 验证应该是:如果设置了密码,那么确保它的长度至少为3(这很短)。

当您通过此控制器更新用户时,应确保存储的密码不会更改。