我正在使用blowfish gem爲我的用戶加密密碼(user
模型)。Rails用blowfish丟失參數密碼
模式中的我沒有password
場了,但在軌道控制檯我可以(而且必須),以便能夠調用user.save
運行user.password = "xxx"
和user.password_confirmation = "xxx"
。這在rails控制檯中工作,但我有一個webform,用戶在邏輯上能夠編輯他/她的密碼。
這是我edit.html.erb
<%= form_for(@user) do |f| %>
<%= render(:partial => "form", :locals => {:f => f}) %>
<%= submit_tag("Edit User") %>
<% end %>
在_form.html.erb
,涉及到密碼parital是這個
<table>
...
<tr>
<th>Password</th>
<td><%= f.text_field(:password) %></td>
</tr>
<tr>
<th>Confirm Password</th>
<td><%= f.text_field(:password_confirmation)%></td>
</tr>
在我users_controller.rb
我需要login password password_confirmation
這樣
def update
@user = User.find(params[:id])
@user.update_attributes(user_params)
if @user.save
flash[:notice] = "Update Successful"
redirect_to(:action => 'show', :id => @user.id)
else
flash[:notice] = "Error Updating"
render('edit')
end
end
和
私人
def user_params
r = params.require(:user)
r.require(:login)
r.require(:password)
r.require(:password_confirmation)
r.permit(:first_name, :last_name, :login, :password, :password_confirmation)
end
的問題,不是我提交完整的形式,即更新的罰款。問題是,當我離開密碼字段爲空,而不是再次渲染編輯形式,它給了我一個Action Controller: Exception
param not found: password
並指向r.require(:password)
線user_params
功能
編輯
我評論這兩個要求的行並驗證模型中是否存在登錄名,密碼,password_confirmation。但是現在我得到這個錯誤
undefined method
user'for#pointing to the
@ user.upadte_attributes(user_params)`line。
我仍然需要:user
然後.permit(.....)
爲Rails 4中的強參數吧?
EDIT 2 - 在users_controller.rb
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:notice] = "Update Successful"
redirect_to(user_path(@user.id))
else
flash[:notice] = "Error Updating"
render('edit')
end
end
和user params
私人
def user_params
params.require(:user).permit(:first_name, :last_name, :login, :password, :password_confirmation, :position, :pictureString)
end
錯誤信息更新方法:
undefined method `user' for #<User:0x007f4d482b1af0>
Extracted source (around line #36):
34 def update
35 @user = User.find(params[:id])
36 if @user.update_attributes(user_params)
37 flash[:notice] = "Update Successful"
38 redirect_to(user_path(@user.id))
39 else
app/controllers/users_controller.rb:36:in `update'
編輯
一些進一步的調查表明這一點:
如果我離開了.permit(....)
出user_params
功能(即它只讀params[:user]
),那麼我沒有得到未定義的方法錯誤,但預期的forbidden attributes
錯誤。也許這可以幫助你找到問題所在。
你得到的錯誤,因爲這一行:'r.require(:password)' - 所以當然如果它是空的,你會得到這個消息。如果您嘗試驗證是否存在密碼屬性,則應在模型中完成。 – veritas1
謝謝,我正在關注的教程把需求放在控制器中,而不是模型 – Killerpixler
酷,所以你已經回答了你自己的問題。 – veritas1