2016-04-26 12 views
-1

私は調理師のレシピを見せるシンプルなウェブサイトを持っています。団体:1対多の関係、多くの人から1人に戻る方法は?

すべての料理本には多数のレシピがあります。

私の質問:ユーザーをレシピページから適切な料理ブックページに戻すにはどうすればよいですか? idのレシピを見ているユーザーに、idの2の料理本に戻る方法を教えてください。

クックブックのコントローラー:

class CookbookController < ApplicationController 
    def index 
     @cookbooks = Cookbook.all 
    end 

    def show 
    @cookbook = Cookbook.find(params[:id]) 
    @recipes = @cookbook.recipes 
    end 
end 

レシピコントローラー:

class RecipesController < ApplicationController 
    def show 
    @recipe = Recipe.find(params[:id]) 
    end 
end 

クックブックモデル:

class Cookbook < ActiveRecord::Base 
    has_many :recipes 
end 

レシピモデル:

class Recipe < ActiveRecord::Base 
    belongs_to :cookbook 
end 

ルート:私が使ってきたこれまでは

Rails.application.routes.draw do 
    get '/' => redirect('/cookbooks') 

    get '/cookbooks' => 'cookbooks#index' 
    get '/cookbooks/:id' => 'cookbooks#show', as: :cookbook 

    get '/recipe/:id' => 'recipes#show', as: :recipe 
end 

<%= link_to "Back", :back %> 

が、これは恒久的な解決策ではありません。

私は hereルーティングにガイドレールを、続いて、私は次の試みている(そして次のエラー受信):

<%= link_to "Back", cookbook_path(@cookbook) %> 

Noルート一致{:アクション=> "ショー"、:コントローラ= > "料理"、:ID =>ゼロ}必要なキーが欠落:[:ID]

<%= link_to "Back", cookbook_path(@cookbook.id) %> 

未定義方法ニルため `ID」:NilClass

とエラー/例外を上昇または代わりに料理idのレシピidで働いていたいずれかの他のソリューション。

また、料理レシピのidを取得するために、レシピコントローラがCookbookコントローラを継承できるようにしました。

答えて

1

cookbook_pathでCookbookコントローラを使用しようとしたときに正しいトラック(意図しない)がありました。

各レシピには、それぞれの料理本のidが両方のモデルで定義した一対多の関係で保存されます。

そのため、我々はこの単純なlink_toを利用することができます:

<%= link_to "Back", cookbook_path(@recipe.cookbook.id) %> 
関連する問題