rails route:具有不同id参数的相同url

时间:2014-03-05 20:32:52

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

  • ruby​​ 2.0.0p247
  • Rails 4.0.0

同一个网址是否可能包含不同的ID参数?

让我更详细地解释一下。我希望这些相对路径:

  • 食谱/素食(食谱/:kind_id)
  • 食谱/饮料(receitas /:category_id)

“kind”和“category”是两个不同的模型,具有自己的ID和与“recipe”相同的关系。

我有这个协会:

recipe.rb

belongs_to :kind
belongs_to :category

的routes.rb

resources :recipes, :only => "index" do
    collection do
        get :kind, :to => "recipes#index", :path => ":kind_id"
        get :category, :to => "recipes#index", :path => ":category_id"
    end
end

佣金路线

kind_recipes GET    /receitas/:kind_id(.:format)     recipes#index
category_recipes GET    /receitas/:category_id(.:format) recipes#index

配方#索引

if params[:kind_id]
    @kind = Kind.find_by_slug(params[:kind_id])
    @recipes = @kind.recipes

elsif params[:category_id]
    @category = Category.find_by_slug(params[:category_id])
    @recipes = @category.recipes
end

当我访问“食谱/饮料”(饮料是“category_id”)时,传递的参数是“kind_id”,因为路线顺序。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

当Rails进行路由时,它实际上并没有在数据库中查找匹配的数据。因此,在不查看数据的情况下,您的两条路线完全相同,变量(kind_id& category_id)只是命名为不同。如果您在example / recipes / some_name上收到请求,则rails将匹配第一个请求,因为两个路由都匹配请求。

您需要在路径中指明其类别或种类的内容。如果你真的永远不会有一个具有相同名称的类别和种类,那么你可以只有一条路线并尝试匹配控制器中DB的类别或种类。