1

私の Rails アプリでは、simple_form. ビューでフォームを送信するときに、UsersController からアクションを呼び出したいと考えていeditます。

コード:

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" } %>が、うまくいきませんでした。アクション「確認」が呼び出されることなく、属性が更新されました。

私の問題は、UsersController で同時に 2 つのアクションを呼び出そうとしていることだと思いupdateますconfirm。ただし、問題を解決するための回避策を実行する方法がわかりません。

私が達成したいのは、ユーザーがメールを変更した場合、確認メールを送信して確認したいということです。そのため、ユーザーがフォームを送信して電子メール属性を更新するconfirmと、パラメーターを保持するリンクを含む電子メールを送信するアクションを呼び出します。ユーザーがリンクをクリックすると、パラメーターを使用してアプリケーションに移動します。

4

2 に答える 2

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 に答える
0

このコードは役に立つかもしれませんが、これが最善のアイデアであるかどうかを知っていますか?

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

ただし、このコードはconfirm、フォームを送信するときにのみユーザーコントローラーのアクションを呼び出します。フォームを送信する前に特定の条件を確認したい場合はjquery、クライアント側の検証として使用できます。

于 2013-02-14T07:16:37.013 に答える