提交表格时要求采取行动

时间:2013-02-14 07:11:38

标签: ruby-on-rails simple-form

在我的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中调用两个操作updateconfirm。但是,我不知道如何解决问题的解决方法。

我想要实现的是,如果用户更改了他的电子邮件,我想发送一封确认电子邮件进行验证。因此,当用户通过发送表单更新其电子邮件属性时,我会调用confirm操作以发送包含保存参数的链接的电子邮件。当用户单击该链接时,他将使用参数指向应用程序。

2 个答案:

答案 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