2016-03-10 35 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(這很短)。

當您通過此控制器更新用戶時,應確保存儲的密碼不會更改。