我想知道如何访问rails中嵌套资源中的路由。我添加了类别,它打破了我的应用程序。
路线:
resources :categories do
resources :posts do
resources :comments
end
end
它出错:
<% @posts.each_with_index do |post, index| %>
<%= link_to post do %> # originally, this used to work but now it says 'undefined method "post_path"'
<li class="post-title"><%= truncate post.title, length: 50 %></li>
<li class="post-content"><%= truncate post.content, length: 400 %></li>
<li><span class="post-comments"><%= post.comments.count %> comments</span></li>
<% end %>
我的根设置为帖子#index并有一个帖子列表。然而,路线嵌套(最初我没有类别)已经破坏了路线。
运行rake路线我得到了部分:
category_posts GET /categories/:category_id/posts(.:format) posts#index
POST /categories/:category_id/posts(.:format) posts#create
new_category_post GET /categories/:category_id/posts/new(.:format) posts#new
edit_category_post GET /categories/:category_id/posts/:id/edit(.:format) posts#edit
category_post GET /categories/:category_id/posts/:id(.:format) posts#show
PATCH /categories/:category_id/posts/:id(.:format) posts#update
PUT /categories/:category_id/posts/:id(.:format) posts#update
DELETE /categories/:category_id/posts/:id(.:format) posts#destroy
如何调整路线以补偿嵌套?或者有更好的方法来嵌套吗?
答案 0 :(得分:1)
您需要在posts
资源下定义另一个嵌套category
的块:
# Existing
resources :posts do
resources :comments
end
# Additional block
resources :categories do
resources :posts do
resources :comments
end
end
使用附加区块,您现有的路线保持不变,因此现有路线不会中断!
最好将路线限制为仅需要/使用的路线。例如,如果您只需要/categories/:category_id/posts
,index
,那么您的路线将更新为:{/ p>
posts_controller
通过这种方式,您可以更好地控制路径并提高应用程序的可维护性。
答案 1 :(得分:0)
vee的答案是正确的。如果您的网站处于实时状态并且更改网址会影响指向索引网页的链接,则建议您这样做。
否则,您应该指向嵌套资源的链接,如下所示:
<%= link_to post.title, [post.category, post] %>