我有两个模型,论坛和主题。我的路线中也有自定义参数,例如:永久链接而不是:id。例如。
我的路线:
resources :forums, :param => :permalink do
resources :topics, :param => :permalink
end
这导致:
forum_topics_path GET /forums/:forum_permalink/topics(.:format) topics#index
POST /forums/:forum_permalink/topics(.:format) topics#create
new_forum_topic_path GET /forums/:forum_permalink/topics/new(.:format) topics#new
# and some others
我的表单视图:
<%= form_for([@forum, @topic], :url => {:forum_permalink => @forum.permalink, :permalink => @topic.permalink}) do |f| %>
<!-- some elements -->
<% end %>
form_for帮助程序输出不正确的操作路径。例如,新操作视图将表单显示为:
<form accept-charset="UTF-8" action="/forums/atque-velit/topics/new" class="new_topic" id="new_topic" method="post">
为什么Rails没有使用正确的操作?我错过了一个网址选项吗?
答案 0 :(得分:0)
原始建议
尝试:
<%= form_for([@forum, @topic], :url => forum_topic_path(@forum.permalink, @topic.permalink)) do |f| %>
修改强>
您可以使用polymorphic_path
来实现这一目标,但由于某些原因,在使用自定义参数时会尝试将.<id number>
放在网址的末尾。
polymorphic_path([@forum, @topic], { forum_permalink: @forum.permalink, permalink: @topic.permalink })
产生类似的东西:
/<forums>/<forum_permalink>/<topics>/<permalink>.<forum id>
你可以通过强制格式选项为nil来解决这个问题:
<%= form_for([@forum, @topic], url: polymorphic_path([@forum, @topic], { forum_permalink: @forum.permalink, permalink: @topic.permalink, format: nil })) do |f| %>
但是这有点混乱。