自定义路线产生点而不是'?id ='

时间:2014-08-09 03:41:51

标签: ruby-on-rails custom-routes

我通过在我的routes.rb中添加以下内容为我的rails应用添加了一个新的操作:

resources :adventures do
  member do
    match :upvote, via: [:post, :delete]
    match :downvote, via: [:post, :delete]
  end
  get 'seed', on: :new
end

(你可以忽略投票,只是想向你展示整个区块)

  upvote_adventure POST|DELETE /adventures/:id/upvote(.:format)          adventures#upvote
downvote_adventure POST|DELETE /adventures/:id/downvote(.:format)        adventures#downvote
seed_new_adventure GET         /adventures/new/seed(.:format)            adventures#seed
        adventures GET         /adventures(.:format)                     adventures#index
                   POST        /adventures(.:format)                     adventures#create
     new_adventure GET         /adventures/new(.:format)                 adventures#new
    edit_adventure GET         /adventures/:id/edit(.:format)            adventures#edit
         adventure GET         /adventures/:id(.:format)                 adventures#show
                   PATCH       /adventures/:id(.:format)                 adventures#update
                   PUT         /adventures/:id(.:format)                 adventures#update
                   DELETE      /adventures/:id(.:format)                 adventures#destroy

但是这个:

      seed_new_adventure_path(@adventure_collection.id)

生成这个:

http://localhost:3000/adventures/new/seed.6

而不是:

http://localhost:3000/adventures/new/seed?id=6

我读了很多帖子,人们得到点而不是斜线,但没有添加额外的新动作。我做错了什么,还是我需要添加更多东西?

编辑:我确实犯了一个错误并且并不意味着破坏冒险之路(我最初是如何拥有的)。真正的问题是我需要做的就是将id作为参数传递。

这是我要寻找的路径:

  redirect_to seed_new_adventure_path(:id => @adventure_collection.id)

3 个答案:

答案 0 :(得分:2)

这是因为你使用了错误的复数。

在您的示例中,您正在使用: seed_new_adventures_path(@adventure_collection.id)

但该路线被恰当地描述为: seed_new_adventure_path(@adventure_collection.id)

并且可能会正常工作并且更具可读性: seed_new_adventure_path(@adventure_collection)

答案 1 :(得分:2)

<强>路线

虽然Brad Werth是正确的(您的路线多元化不正确),但您遇到的最大问题是您要尝试实现的目标。

您已指定以下链接:

domain.com/adventure/new/seed

这是get请求,不存在其他参数。我不明白你为什么要把一个物体传递给这条路线?这就是您收到.6问题的原因(因为Rails无法构建路由),而不是/6

在考虑了您尝试做的事情之后,我相信您可以按照以下方式解决问题:

#config/routes.rb
resources :adventures do
   ...
   get "seed(/:id)", on: :new #-> domain.com/adventures/new/seed/6
end

答案 2 :(得分:0)

好的,所以为了得到这个:

http://localhost:3000/adventures/new/seed?id=7

我需要将参数传递给链接,如下所示:

  seed_new_adventure_path(:id => @adventure_collection.id)

我忘记了如何传递参数!