2012-03-09 20 views
0
  • ルビー1.9.2p290
  • レール

3.1.1は、基本的に私は2つのモデルがあります。 - レシピのリスト のlink_toアクション "ショー"

  • /

    • /レシピ:私はURLを(私が欲しい、まさに)持っている。これにより

      resources :recipes 
      
      resources :chefs do 
      # list of recipes from chef 
      resources :recipes, :to => 'recipes#index_chef' 
      end 
      

      class Chef < ActiveRecord::Base 
      has_many :recipes 
      end 
      
      class Recipe < ActiveRecord::Base 
      belongs_to :chef 
      end 
      

      そして、次のルートシェフ/ユーザーネーム/レシピ- シェフのレシピのリスト

    • /シェフ/ - シェフのリスト
    • /シェフ/ユーザ名- シェフのプロフィール

    RecipesControllerコントローラ:

    def index 
    @chef = Chef.find_by_username(params[:chef_id]) 
    @recipes = Recipe.where({ :status_id => 1 }).order("id desc").page(params[:page]).per(9) 
    end 
    
    def index_chef 
        @chef = Chef.find_by_username(params[:chef_id]) 
        @recipes = @chef.recipes.where(:status_id => 1).order("id desc").page(params[:page]).per(9) 
    end 
    

    マイレシピインデックスビュー:

    <%= link_to recipe.chef.username.capitalize, @chef %> 
    

    http://3001/chefs/username/recipes私はシェフのプロフィールへの正しいリンクを持っています。

    しかし、http://3001/recipesに間違ったリンクがあります。

    私は間違っていますか?

  • +1

    あなたは、意図する結果が何であるか、または現在の結果が何であるかを指定しません。 – danpickett

    +0

    申し訳ありませんが、私は正しく説明しなかったかもしれません(私の英語はあまり良くありません)。 レシピのコントローラのインデックスビューで、シェフのショーアクション(/ chefs/username)へのlink_toが必要です。 – maiconsanson

    答えて

    0

    http://3001/recipes(これは奇妙なURLです)では、params[:chef_id]にアクセスできません。したがって、@chef変数をビューに表示することはできません。それはnilでなければなりません!この問題を回避するには

    、この

    <%= link_to recipe.chef.username.capitalize, recipe.chef %> 
    

    にあなたのlink_toを変更するには、このようなあなたのコントローラであることをロードすることによって、あなたの@recipesレコードを熱望して負荷にシェフをお勧めします:

    @recipes = Recipe.where({ :status_id => 1 }).includes(:chef).order("id desc").page(params[:page]).per(9) 
    

    ・ホープこれは役に立ちます。

    +0

    Phyo、ありがとう!うまく動作します。熱心なロードヒント。私は新しいレールです! なぜあなたはURLが変だと思いましたか? – maiconsanson

    +0

    通常、http://127.0.0.1:3001/recipesやhttp:// localhost:3001/recipesなどです。ホストファイルを変更したことがありますか? –

    +0

    確かに、あなたは正しいです。何らかの理由で私は** localhostを省いた:** – maiconsanson

    関連する問題