我的视图中有一段代码
<% 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 %>
参数:topic_id作为get发送并附加到url,我希望它作为post body的一部分发送。我尝试了各种组合,甚至阅读了link_to API文档。
我缺少什么?
答案 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}' ?" %>
P.S。我无法记住它是pages_session_start_path
还是session_start_pages_path
,但无论哪种方式,您都可能希望将routes.rb中的URL帮助重命名为更难忘的内容。
确保此网址的路线设置为POST
post "/pages/session_start", to: "pages#session_start", as: :session_start
答案 1 :(得分:2)
实际上,您可以执行rake路由来检查要POST的路由。 你的路线应该是这样的:
resources :pages do
member do
post 'session_start'
end
end
然后在你的链接中,你可以做到
<%= link_to "Hello", session_start_pages_path() %>
答案 2 :(得分:-1)
请参阅link_to
文档,其中包含url_options
和html_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}' ?" } %>