2014-08-28 24 views
1

我想在聯繫人的頁面上建立一個動態表單。我想在此頁面上添加一個「添加電子郵件地址」的鏈接,然後當我點擊它時,表單會顯示爲輸入電子郵件地址。Rails動態表單遠程真正的控制器沒有響應

所以我用遙控器真的link_to:

= link_to "Add an email", add_email_path, id:'link-remote-link', remote: true 

在我控制我指定:

def add_email 
    render layout: false 
    end 

但是,當我收到我的監聽Ajax響應:sucess,佈局仍然是他們在變量中。但我只是想要的形式add_email.html.haml

爲了試圖知道我的控制器中的代碼是否被執行,我嘗試在其中創建一個對象。事實是,它從未被創造。

從來沒有少,導軌控制檯 「由ContactsController#add_email爲JS 處理寫道:」

所以...爲什麼不執行?

謝謝:)

回答

1

佈局

我們設在application_controller佈局管理Ajax響應:

#app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    layout Proc.new { |controller| !controller.request.xhr? } 
end 

你不妨試試這個 - 看看它是否您的控制器正在渲染布局的調用。

就我個人而言,我認爲你的layout: false調用正在被控制器的其他元素/部分覆蓋。我建議你檢查,以確保這種情況

-

控制器

如你所說,情況可以是你的控制器不會被調用,或正確處理。

這可能是由很多問題引起的,最顯着的原因是路由不正確,或者其他一些依賴性阻止了方法正確觸發。

爲了澄清,我會確保我有以下設置:

#config/routes.rb 
resources :contacts do 
    get :add_email, on: :collection 
end 

#app/controllers/contacts_controller.rb 
class ContactsController < ApplicationController 
    def add_email 
     ... 
    end 
end 
+0

如果你想進入這個聊天,請回復此評論 – 2014-08-28 10:51:06

+0

這實際上似乎是一個正確的方法組織代碼。 不管怎麼說,我不知道這是你想告訴我的,但是我已經在控制器的開始而不是結束時執行了「add_email」操作。它神奇地工作... 我不明白爲什麼。 – Zoz 2014-08-28 11:25:09

+0

你有在那裏的私人聲明? – 2014-08-28 11:27:52

相關問題