嵌套路由破碎:Rails 3

时间:2012-02-06 15:39:49

标签: ruby-on-rails-3 rails-routing

我有一段时间让这个特定的嵌套路线发挥作用。这很奇怪,因为我一直在将许多路由迁移到新的Rails 3语法,特别是这个似乎不起作用。到此为止。

我有一个名为“piece”的对象,它有一个名为“piece_comment”的嵌套对象。这是routes.rb的样子:

resources :piece do
  resources :piece_rating, :as => :rating
  resources :piece_comments, :as => :comments
end

以下是piece / show.html.erb的样子,并提供一个表单来提交评论:

<% @piece_comment = PieceComment.new(:piece_id => @piece.id, :user_id => current_user.id) %>

<%= form_for [@piece, @piece_comment] do |f| %>
  <%= f.hidden_field 'piece_comment', 'user_id' %>
  <%= f.hidden_field 'piece_comment', 'piece_id' %>
  <%= f.text_area 'piece_comment', 'comment' %>
  <%= f.submit_tag 'Post' %>
<% end %>

现在,奇怪的是我得到了“form_for”行触发的以下错误:

undefined method `piece_piece_comments_path' for #<#<Class:0x007f80ec732a48>:0x007f80ec737ae8>

我的路由文件中的:as不应该将其发送到piece_comments_path,而不是piece_piece_comments_path吗?如果我将其更改为:as => :foobar或其他什么,我会得到同样的错误。很明显,路由文件似乎无法正常工作。 (奇怪的是,评级路线的行为似乎很好。)

关于路由可能出错的任何想法?

1 个答案:

答案 0 :(得分:1)

Altough我不确定是不是问题,routes.rb中的资源应该是复数。试试:

resources :pieces do
  resources :piece_ratings, :as => :ratings
  resources :piece_comments, :as => :comments
end

使用rake routes查看routes.rb生成的路由的名称。