我正在使用blowfish gem为我的用户加密密码(user
模型)。
我不再有password
字段,但在rails控制台中我可以(并且必须)运行user.password = "xxx"
和user.password_confirmation = "xxx"
以便能够调用user.save
。这适用于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)
的{{1}}行功能
修改
我评论了两个需要行,并验证模型中是否存在login,password,password_confirmation。但是现在我收到了这个错误
user_params
user'for#undefined method
@ user.upadte_attributes(user_params)`line。
对于Rails 4中的强参数,我还需要pointing to the
然后:user
吗?
编辑2 - .permit(.....)
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
),那么我不会得到未定义的方法错误,而是预期的{{1}错误。也许这可以帮助你找到错误。
答案 0 :(得分:0)
强参数不用于表单验证。它们用于安全目的,以替换模型级别使用的attr_accessible
宏。
表单验证应该在客户端执行,或者将params传递给执行验证的某个模型(如果认为有效,则会调用update_attributes
。)