同一个网址是否可能包含不同的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”,因为路线顺序。
我错过了什么?
答案 0 :(得分:0)
当Rails进行路由时,它实际上并没有在数据库中查找匹配的数据。因此,在不查看数据的情况下,您的两条路线完全相同,变量(kind_id& category_id)只是命名为不同。如果您在example / recipes / some_name上收到请求,则rails将匹配第一个请求,因为两个路由都匹配请求。
您需要在路径中指明其类别或种类的内容。如果你真的永远不会有一个具有相同名称的类别和种类,那么你可以只有一条路线并尝试匹配控制器中DB的类别或种类。