1

在我的 Rails 应用程序中,我使用simple_form. edit当我在视图中提交表单时,我想从 UsersController 调用一个操作。

代码:

编辑.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" } %>会起作用,但它没有;属性已更新,但未调用“确认”操作。

我认为我的问题是我试图update同时confirm在 UsersController 中调用两个动作。但是,我不确定如何解决问题。

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

4

2 回答 2

0

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

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

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

于 2013-02-14T07:16:37.013 回答
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
于 2013-02-14T07:38:55.273 回答