是否可以从更新操作/方法以外的操作/方法更新?例如,在我的用户控制器中,我已经有了用户帐户其他部分的更新方法。
我需要单独更改用户密码。是否有可能有这样的事情:
def another_method_to_update
user = User.authenticate(current_user.email, params[:current_password])
if user.update_attributes(params[:user])
login user
format.js { render :js => "window.location = '#{settings_account_path}'" }
flash[:success] = "Password updated"
else
format.js { render :form_errors }
end
end
然后知道我的更改密码表格是否使用该方法来执行更新?
它有3个字段:当前密码新密码确认新密码
我使用ajax来显示表单错误。
亲切的问候
答案 0 :(得分:0)
是; update
操作只是一个默认设置,可以简化基于REST的界面。您将需要确保在config/routes.rb
中有一个引用users#another_method_to_update
的POST路由,假设您在UsersController(以及Rails 3)中执行了所有这些操作,但您问题的基本答案是该模型操作(包括更新字段)可以在模型可用的任何地方完成。
在可以调用哪些模型方法和调用哪些控制器方法之间没有任何关系。
答案 1 :(得分:0)
为什么要为此使用其他路线?坚持惯例,使用默认路线。如果我理解正确,您的页面包含密码更新表单。
我们可以在更新方法中为此编写完整的代码,但这更清晰,更加不言自明:
def update
change_password and return if change_password?
# old code of your update method
# ...
end
private
def change_password?
!params[:current_password].nil?
end
def change_password
user = User.authenticate(current_user.email, params[:current_password])
respond_to do |format|
if user.update_attributes(params[:user])
login user
flash[:success] = "Password updated"
format.js { render :js => "window.location = '#{settings_account_path}'" }
else
format.js { render :form_errors }
end
end
end
对于那些会查看您的代码的人来说,这更容易理解,因为您仍在调用更新方法来更新模型,然后执行自定义操作。
我还修复了自定义方法代码。
答案 2 :(得分:0)
在config / routes.rb中:
puts "users/other_update_method"