我通过在我的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)
答案 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)
我忘记了如何传递参数!