2013-12-12 83 views
0

我創建的窗體在模態窗口中未顯示時效果很好。當我將它插入模態時,突然POST正在錯誤的地方尋找路徑。Rails無法找到模態窗體的POST路徑

我已經搜遍了關於SO的問題,並閱讀了路徑和控制器的RAILS指南和API文檔,但找不到答案。我試圖在表單中指責「:remote => true」 - 似乎有可能需要向控制器添加某些內容 - 但我找不到。

下面是從控制器的耙路由的路由:

messages POST /messages(.:format)  messages#create 
new_message GET /messages/new(.:format) messages#new 

routes.rb中:

resources :messages, only: [:new, :create] 

控制器:

class MessagesController < ApplicationController 

    def new 
    @message = Message.new 
    end 

    def create 
    @message = Message.new(params[:message]) 
     if @message.valid? 
     NotificationsMailer.new_message(@message).deliver 
     redirect_to root_path, :notice => "Thanks! Your message was sent." 
     return 
     else 
     render :new 
     end 
    end 
end 

表單標籤(形式顯示和精美的作品,除了發送):

<%= form_for(:message, :remote => true) do |form| %> 

導航:從日誌

<%= link_to('Contact', new_message_path, :class => 'contact', :remote => true, 'data-toggle' => "modal", 'data-target' => '#myModal') %> 

POST錯誤

Started POST "/messages/new" for 127.0.0.1 at 2013-12-12 14:33:43 -0800 
ActionController::RoutingError (No route matches [POST] "/messages/new"): 

POST as它發生在工作,無模式的版本:

Started POST "/messages" for 127.0.0.1 at 2013-12-12 14:27:50 -0800 
Processing by MessagesController#create as HTML 

日誌文件條目從點擊「聯繫」:

Started GET "/messages/new" for 127.0.0.1 at 2013-12-12 14:33:37 -0800 
Processing by MessagesController#new as JS 
    Rendered messages/_form.erb (5.1ms) 
    Rendered messages/_new.erb (7.7ms) 
    Rendered messages/new.js.erb (10.7ms) 
Completed 200 OK in 17ms (Views: 14.2ms | ActiveRecord: 0.0ms) 

什麼是做的就是POST工作正確的事情?

+0

能否請您包括請求啓動日誌條目當你點擊「聯繫我們」鏈接?自從我與Rails的UJS處理程序合作已經有一段時間了,但這可能會有所幫助。 – janfoeh

+0

我編輯了問題以包含來自「聯繫人」的點擊。 – Deborah

+0

謝謝。你的'new.js.erb'看起來如何? – janfoeh

回答

1

form_for標籤期待一個新Message對象被傳遞給它。你已經在實例化控制器的new行動@message變量,所以乾脆把它傳遞給你的form_for標籤:

<%= form_for(@message, :remote => true) do |form| %> 
+0

哦!我有錯誤的語法 - 我有:消息而不是@消息!現在它發佈。謝謝 !! – Deborah

0

編輯:無視......

/messages/new只適用於GET請求;這就是爲什麼你的POST請求失敗。嘗試

<%= link_to('Contact', new_message_path, :class => 'contact', :method => :get, :remote => true, 'data-toggle' => "modal", 'data-target' => '#myModal') %> 
+0

如果它能夠工作,我會感到尷尬,因爲我已經嘗試過,但只是爲了防止再次嘗試 - 同樣的錯誤。我也嘗試過在表單標籤中使用「:action =>:create」,但它也不起作用。應該有一些方法來告訴郵件的表單或路由到POST,而不是消息/新的。 – Deborah

+0

此外,在非模態形式下,即使表單位於'messages/new',它也能正確找到POST路由。 ??? – Deborah

+0

@DeborahSpeece表單本身通過GET調用來呈現給'/ messages/new',但是它發佈到'/ messages'。 – janfoeh