为什么form_for,使用自定义参数和没有url助手,输出错误的操作?

时间:2014-05-08 16:05:44

标签: ruby-on-rails

我有两个模型,论坛和主题。我的路线中也有自定义参数,例如:永久链接而不是: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没有使用正确的操作?我错过了一个网址选项吗?

1 个答案:

答案 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| %>

但是这有点混乱。