2013-04-03 43 views
1

我有我的視圖代碼的Rails的link_to與「讓」發送數據,而不是「後」

<% topics.each do |t| %> 
<li><%= link_to "#{t.name}", {:controller => "pages", :action => "session_start", :topic_id => t.id} , :method => :post , :confirm => "Start a new QA session for '#{t.name}' ?" %></li> 
<% end %> 

參數:GET和附加到URL的,我希望它被髮送topic_id發送作爲崗位主體的一部分。我嘗試了各種組合,甚至閱讀link_to API文檔。

我在想什麼?

+0

我覺得得到的是默認的方式。您可以使用。 button_to然後做一個:方法=>:後 –

+0

我想要一個鏈接,而不是一個按鈕。 –

+0

你也可以用link_to做到這一點對不起。/ –

回答

-1

查看link_to doc,有一個url_optionshtml_options散列;選項method必須屬於url_options散列,但是由於您已經編寫了代碼,因此它屬於html_options散列。嘗試移動在一個單一的散你所有的選項(在你的榜樣,你不需要html_options哈希):

<%= link_to "#{t.name}", {:controller => "pages", :action => "session_start", :topic_id => t.id, :method => :post , :confirm => "Start a new QA session for '#{t.name}' ?" } %> 
+0

當我這樣做時,一切(方法,主題和確認)成爲獲取請求的參數。 –

2

爲什麼不這樣做:

<%= link_to "#{t.name}", pages_session_start_path(topic_id: t.id), method: :post, confirm: "Start a new QA session for '#{t.name}' ?" %> 

附:關閉我的頭頂我不記得是否是pages_session_start_pathsession_start_pages_path但無論哪種方式,您可能想要將routes.rb中的URL助手重命名爲更令人難忘的東西。

確保該URL的路徑設定爲POST

post "/pages/session_start", to: "pages#session_start", as: :session_start 
+0

他們都沒有工作。 :( –

+0

你是否有任何錯誤,或者它只是不POST?順便說一句,我有一個額外的'}'在那裏以前意外 –

+0

如果我命名的路線和嘗試的代碼,它是相同的獲取請求。 –

2

實際上,你可以做一個耙路線來檢查您要發佈的路由。 你的路由應該是這樣的:

resources :pages do 
    member do 
     post 'session_start' 
    end 
    end 

然後在你的鏈接,你可以做

<%= link_to "Hello", session_start_pages_path() %> 
+0

你發佈的路線代碼更好 –