- 紅寶石1.9.2p290
- 軌3.1.1
我有兩個型號:配方和RECIPE_CATEGORY分別 「belongs_to的」 和 「的has_many」 關聯。的link_to通過關聯模型
我可以很好地通過這個網址按類別列出了所有的食譜:
http://localhost:3001/recipes/salads
但在這種按類別指向配方列表我「的link_to」似乎在自己的行動唯一的工作:食譜#list_by_category。
<%= link_to recipe.recipe_category.name, recipe_category_recipes_path(@recipe_categories) %>
的RecipesController
def index
@recipes = Recipe.where({ :status_id => 1 }).includes(:chef, :recipe_category).order("updated_at desc").page(params[:page]).per(
end
def list_by_category
@recipe_category = RecipeCategory.find_by_name_plural(params[:recipe_category_id])
@recipes = @recipe_category.recipes.where(:status_id => 1).includes(:chef).order("id desc").page(params[:page]).per(9)
end
路線
resources :recipes, :id => /[0-9]+/ do
match 'pagina/:page', :action => :index, :on => :collection # Kaminari
# list of recipes by category
get 'recipe_category', :to => 'recipes#list_by_category', :path => ':recipe_category_id', :on => :collection, :recipe_category_id => /[a-z]+/
end
期望URLS
- 本地主機:3001 /食譜/ - 食譜
- 本地主機的列表: - :3001 /食譜/沙拉- 顯示食譜由類別
- 顯示食譜的頁面
- 本地主機3001 /食譜/ 21681 本地主機:3001 /食譜/午餐- 顯示食譜以一天中每小時
那麼,如何建立一個「的link_to」跨所有按類別分食譜行動?
我清楚嗎?如果我不是,請告訴我。
編輯
的RecipesController
def index
if params[:category_id]
@category = Category.find_by_slug(params[:category_id])
@recipes = @category.recipes.where(:status_id => 1).includes(:chef).order("updated_at desc").page(params[:page]).per(9)
else
@recipes = Recipe.where({ :status_id => 1 }).includes(:chef, :category).order("updated_at desc").page(params[:page]).per(9)
@count_all = Recipe.where({ :status_id => 1 }).count()
end
end
路線
resources :categories, :path => "recipes/categories", :only => :index do
resources :recipes, :path => "", :only => :index do
match 'pagina/:page', :action => :index, :on => :collection
end
end
resources :recipes, :path => 'receitas', :id => /[0-9]+/ do
match 'pagina/:page', :action => :index, :on => :collection
end
URLS
- 本地主機:3001 /食譜- 列表中的所有食譜
- 本地主機:3001 /食譜/類別- 列出所有類別
- 本地主機:3001 /食譜/分類/沙拉* - 名單配方按類別
SOLUTION
<%= link_to recipe.name, category_recipes_path(recipe.category.slug) %>
我不得不說:Rails是關於以下命名約定,它們使事情變得明顯和容易。 「RecipeCategory」不是模型的通常名稱。類別是一個模型。食譜是一個模型。一旦你這樣想了,我認爲你的問題的答案可能會更明顯一些。好的,所以我把它放在胸前:-) 一般答案:路線用於建立映射到控制器操作的URL。如果你遵循REST模式,你會爲自己節省一些工作和困惑。 – 2012-03-19 21:52:40
嗨tharrison,謝謝你的回答。當你看到時,我是新的紅寶石/鐵軌。 但是,關於名稱的模型,我必須說在這個項目中有很多種類的類,比如TipCategory,MenuCategory等......這是我發現組織各種類別的方式。 在這種情況下,你有關於名稱的建議嗎? 關於「link_to」?我對link_to構造有點困惑,我相信這不僅僅是命名約定。 謝謝。 – maiconsanson 2012-03-20 12:10:44
命名是Rails如何工作的核心 - 它取代了您需要的大量配置。也許如果你有多種類型的類別,你可以在類別表中添加一個「類型」字段?如果你只是在尋找答案,我已經在下面添加了一個:-)。 – 2012-03-20 13:30:05