【问题标题】:Nested routes for comments without using resources不使用资源的嵌套评论路由
【发布时间】:2015-07-29 21:07:45
【问题描述】:

我正在建立一个论坛,并且正在设置线程并且查看没有问题。在尝试在线程中创建 cmets 的过程中,我似乎对如何设置路由感到困惑。通常我知道人们有嵌套路线:

resources :threads do
  resources :comments
end

虽然不同之处在于我的路线不使用资源方法,因为我单独设置了它们:

get '/thread' => 'threads#discussion'
post '/create_thread' => 'threads#create'
get '/create_thread' => 'threads#new', :as => :new_thread
get '/threads/:id' => 'threads#show', :as => :thread_show
get 'threads/edit/:id' => 'threads#edit', :as => :edit_thread
put '/threads/edit/:id' => 'threads#update', :as => :update_thread
delete 'threads/:id' => 'threads#destroy'

Thread/threads 替换了实际位置名称

我有没有办法在每个线程中为 cmets 放置嵌套路由?我已经为每个模型(用户、线程、评论)提供了正确的关联,并将 user_id、thread_id 添加到评论模型中。

如果您对为 cmets 设置路线的正确方法有任何了解或知道一篇文章,请在此处列出。

非常感谢!

编辑

这些 cmets 将直接放置在话题页面上,而不是新页面上。

【问题讨论】:

  • 使用资源丰富的路线。没有理由不这样做,这样可以省去很多麻烦。
  • 我只是不确定资源丰富的路线是否类似于脚手架。这是一种选择,但始终是最好的选择?
  • 有时您可能需要手动定义路线,例如get 除了您资源丰富的路线外,您发布的所有路线都直接对应于resources 会自动为您定义的路线,因此这绝对是您的最佳选择。
  • 好的,谢谢-如果您想在答案中发帖,我会给您积分。再次感谢。
  • 是的,这绝对有可能。你读过关于路由的 Rails 指南吗? guides.rubyonrails.org/…

标签: ruby-on-rails ruby multithreading ruby-on-rails-4 routes


【解决方案1】:

您可以像这样“手动”执行嵌套路由:

get '/threads/:thread_id/comments/new' => 'comments#new'
get '/threads/:thread_id/comments/:id' => 'comments#show'

并且 CommentsController 的 new 操作可以执行以下操作:

def new
  @thread = Thread.find(params[:thread_id])
  @comment = @thread.comments.build
end

不过,我强烈同意Jordan's advice above;你的路由有点混乱,不是完全 RESTful,通过资源丰富的路由更容易表达。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    相关资源
    最近更新 更多