2013-02-14 39 views
1

在我的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操作以發送包含參數的鏈接的電子郵件。當用戶點擊該鏈接時,他被引導到具有該參數的應用程序。

回答

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 
+0

這是一個完美的解決方法。我怎麼能不想到這種方法? – 2013-02-14 08:50:13

0

此代碼可能會幫助你,但知道這是不是一個好主意?

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

但是這個代碼在提交表單時只調用用戶控制器的confirm動作。如果你想在提交表單前檢查某些條件,那麼你可以使用jquery作爲客戶端驗證。

+0

感謝您的輸入。你的方法調用'confirm'動作而不是'update'動作。我得出結論,無法從提交按鈕中調用兩個操作。 – 2013-02-14 08:49:47