Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 提交表单时调用操作_Ruby On Rails_Simple Form - Fatal编程技术网

Ruby on rails 提交表单时调用操作

Ruby on rails 提交表单时调用操作,ruby-on-rails,simple-form,Ruby On Rails,Simple Form,在我的Rails应用程序中,我使用简单的表单。在编辑视图中提交表单时,我想从UsersController调用一个操作 代码: edit.html.erb 我原以为用{:action=>confirm}%>替换提交行会有用,但实际上不行;在未调用操作cofirm的情况下更新了属性 我想我的问题是我试图调用两个操作,同时在UsersController中更新和确认。然而,我不知道如何解决这个问题 我想实现的是,如果用户更改了他的电子邮件,我想发送一封确认电子邮件来验证它。因此,当用户通过发送表单来

在我的Rails应用程序中,我使用简单的表单。在编辑视图中提交表单时,我想从UsersController调用一个操作

代码:

edit.html.erb

我原以为用{:action=>confirm}%>替换提交行会有用,但实际上不行;在未调用操作cofirm的情况下更新了属性

我想我的问题是我试图调用两个操作,同时在UsersController中更新和确认。然而,我不知道如何解决这个问题


我想实现的是,如果用户更改了他的电子邮件,我想发送一封确认电子邮件来验证它。因此,当用户通过发送表单来更新其电子邮件属性时,我调用确认操作来发送包含参数的链接的电子邮件。当用户单击链接时,他将被引导到带有参数的应用程序。

此代码可能会对您有所帮助,但您知道这是不是一个最好的主意吗

 <%=  simple_form_for( @user, :url => { :action => "confirm" }) do |f| %>

但此代码仅在提交表单时调用用户控制器的确认操作。如果您想在提交表单之前检查某些条件,那么可以使用jquery作为客户端验证。

在控制器内部执行业务逻辑是个坏主意。让控制器仅处理渲染和重定向。您可以在回调或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

谢谢你的意见。您的方法调用确认操作而不是更新操作。我的结论是不可能从提交按钮调用两个操作。这是一个完美的解决方法。我怎么能不想到这种方法呢?
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