我有一个配置文件编辑表单,其中我有一个按钮,可以切换另一个表单来更改密码。
我的路线看起来像这样:
resource :profile do
get '/password_edit' => 'profiles#password_edit', as: 'edit_password'
patch '/password_update' => 'profiles#password_update', as: 'change_password'
end
自定义控制器方法:
def password_edit
render partial: 'edit_password'
end
def password_update
if @user.authenticate(params[:user][:current_password]) && @user.update_attributes(user_params)
redirect_to root_url
else
render :edit
end
end
形式:
<div class="password-edit">
<%= form_for @user, {url: '/change_password_profile'} do |f| %>
<div class="password" style="display:none; height:320px;">
<%= render partial: "password_form", locals: { f: f } %>
<div>
<%= f.submit "Update password", class: "btn btn-primary" %>
<%= link_to "cancel and go back", admin_accounts_path, class: "btn btn-link" %>
</div>
</div>
<% end %>
</div>
profiles.js:
$(function(){
$(".expand_password_edit_form").on("click", function(event){
$(".password-edit").find('.password').slideToggle(400,
function(){
$('html, body').animate({
scrollTop: $('.password').offset().top + $('window').height()
}, 1000);
});
});
});
但是,当我单击“提交”按钮时,它将由更新操作处理,而不是由password_update处理。 我知道这是因为我通过js渲染这个形式,路线不会改变。
我该如何做到这一点?