在我的Rails应用中,我使用simple_form
。我想在edit
视图中提交表单时调用UsersController中的操作。
代码:
edit.html.erb
<div>
<%= simple_form_for @user do |f| %>
<%= f.input :name %>
<%= f.input :profile_image %>
<%= f.submit %> // I want to call "confirm" action from UsersController here
<% end %>
</div>
我认为用<%= f.submit 'submit', :input_html => { :action => "confirm" } %>
替换提交行会有效,但事实并非如此;在没有调用“cofirm”动作的情况下更新了属性。
我认为我的问题是我试图同时在UsersController中调用两个操作update
和confirm
。但是,我不知道如何解决问题的解决方法。
我想要实现的是,如果用户更改了他的电子邮件,我想发送一封确认电子邮件进行验证。因此,当用户通过发送表单更新其电子邮件属性时,我会调用confirm
操作以发送包含保存参数的链接的电子邮件。当用户单击该链接时,他将使用参数指向应用程序。
答案 0 :(得分:0)
此代码可能对您有所帮助,但知道这是一个好主意吗?
<%= simple_form_for( @user, :url => { :action => "confirm" }) do |f| %>
但是此代码仅在提交表单时调用用户控制器的confirm
操作。如果您想在提交表单之前检查某些条件,那么您可以使用jquery
作为客户端验证。
答案 1 :(得分:0)
在控制器内部执行业务逻辑是个坏主意。让控制器只处理渲染和重定向。您可以在回调或ActiveRecord :: Observer的帮助下完成此操作。这是回调示例
class User < ActiveRecord::Base
after_save :check_for_email_edits
def check_for_email_edits
if email_changed?
MyMailer.send_confirmation_instructions(self)
end
end
end