2012-03-19 6 views
0
  • ルビー1.9.2p290
  • レール

3.1.1私は2つのモデルがあります。それぞれ "belongs_toの" と "has_manyの" 協会とレシピとRECIPE_CATEGORY。のlink_to

私はこのURLでうまくカテゴリ別に全てのレシピを一覧表示することができます:

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

  • はlocalhost:3001 /レシピ/ - レシピのリスト
  • はlocalhost:3001 /レシピ/ 21681 - ショーレシピのページ
  • はlocalhost:3001 /レシピ/サラダ- ショーレシピカテゴリ
  • によってローカルホスト: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 

のURL

  • はlocalhost:3001 /レシピ- リストのすべてのレシピ
  • はlocalhost:3001 /レシピ/カテゴリ- リストのすべてのカテゴリ
  • はlocalhost:3001 /レシピ/カテゴリ/サラダ* - リストレシピカテゴリで

SOLUTION

<%= link_to recipe.name, category_recipes_path(recipe.category.slug) %> 
+1

私は言わなければなりません:Railsは、物事を明白にする傾向がある命名規則に従います。 "RecipeCategory"はモデルの通常の名前ではありません。カテゴリはモデルです。レシピはモデルです。そのように考えると、私はあなたの質問に対する答えがもう少し明白かもしれないと思います。 [OK]を、私はそれを私の胸から持っている:-) 一般的な答え:ルートは、コントローラのアクションにマップするURLを確立するために使用されます。 RESTパターンに従えば、作業や混乱を避けることができます。 –

+0

こんにちはtharrison、答えてくれてありがとう。私はあなたが見ているように、ルビー/レールについては新しいです。 名前のモデルについては、TipCategory、MenuCategoryなどのような多くのカテゴリのカテゴリがこのプロジェクトにあると言わざるを得ない。これはすべての種類のカテゴリを整理するために見つけた方法だった。 この場合の名前についてのご提案はありますか? 「link_to」について私はlink_to建設についてちょっと混乱しています。そして、私はそれがちょうど命名規則のことではないと信じています。 ありがとうございます。 – maiconsanson

+0

Namingは、Railsがどのように機能するかの中心にあります。これは、必要な場合に大量の設定を置き換えます。カテゴリの種類が複数ある場合は、カテゴリテーブルに「タイプ」フィールドを追加できますか?あなたが答えを求めているのであれば、私は以下を追加しました:-)。 –

答えて

1

あなたが特定のカテゴリ内のすべてのレシピを表示するページへのリンクをしたい場合は、どのような最高の仕事もするrecipe_categoryのネストされたリソースとしてレシピを設定することです:http://guides.rubyonrails.org/routing.html#nested-resources

ルーティングは次のようになります。

resources :recipe_categories do 
    resources :recipes 
end 

これは、あなたがこのようにリンクを使用することができるようになる:

recipe_category_recipes_path(recipe_category) 

いるだろうrecipe_category内のすべてのレシピを表示していましページへのルート。これがあなたが探しているものでない場合は、あなたの質問で明確にしてください。

編集:

あなたは、インデックスのURLにパラメータにタック、およびパラメータに一致しただけのレシピまでの標準的なインデックスビューをフィルタリングするでしょう、あなたのインデックスにキャッチを追加することができます。

は、だからあなたのレールが呼び出しにリンクし、次のようになります。

recipes_path(:category => @category) 
recipes_path(:time => @time) 

次のようになりたURLにつながることになる。

localhost:3001/recipes?category=salads 
localhost:3001/recipes?time=lunch 

そして、あなたのレシピコントローラでのインデックスの方法を変更することができ

def index 
    if params[:category] 
     Recipe.where("category = ?", params[:category]) 
    else if params[:time] 
     Recipe.where("time = ?", params[:time]) 
    else 
     @recipes = Recipe.all 
    end 
end 

これは最高ではない、私はsurではないどのようにこのアプローチは "レール"ですが、それは私のためにこれらの状況で動作します。これがあなたが探しているものか、もし私がもう一度見逃したら、私に教えてください。

+0

こんにちは、上記のようにモデルの名前を変更しました(tharrisonに感謝します)。 numbersnelson、あなたは私の望むURLを見ることができますか?カスタムURLが必要です。あなたのアドバイスのようにネストされたリソースを単に使用することはできません。または私は間違っていますか?ありがとう! – maiconsanson

+0

私の編集した回答を別の方法で調べて、それがあなたが探しているものかどうか教えてください。 – numbersnelson

+0

こんにちはナンセンスン!あなたの時間を費やしてくれてありがとう!私は実際にあなたの提案を1つの行動だけに入れたいと思っていました。私は路線にもいくつかの変更を加えました。ありがとう。しかし、recipes_path(:category => @category)は、私がparams [:category]を持っている場合にのみ機能します。私は、インデックスアクションからすべての条件で作業したいです。どうやってするか?私の言いたいことが分かりますか?私の英語は申し訳ありません! – maiconsanson