我有一个简单的网站,我可以在这里展示食谱中的食谱。
每本食谱都有很多食谱。
我的问题:如何将用户从食谱页面链接回正确的食谱页面?如何将查看id
4食谱的用户带回id
2的食谱?
Cookbook Controller:
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上的Rails指南,我尝试了以下内容(并收到了以下错误):
<%= link_to "Back", cookbook_path(@cookbook) %>
没有路线匹配{:action =&gt;&#34; show&#34;,:controller =&gt;&#34; cookbooks&#34;,:id =&gt; nil}缺少必需的键:[:id]
<%= link_to "Back", cookbook_path(@cookbook.id) %>
未定义的方法`id&#39;为零:NilClass
其他解决方案要么引发错误/异常,要么使用配方id
而不是食谱id
。
我还尝试允许Recipe Controller从Cookbook Controller继承,以获得食谱的id
。
答案 0 :(得分:1)
当您尝试将Cookbook控制器与cookbook_path
一起使用时,您处于正确的轨道上(没有双关语)。
每个食谱都会将其各自食谱的id
与您在两个模型中定义的一对多关系存储起来。
因此,我们可以利用这个简单的link_to
:
<%= link_to "Back", cookbook_path(@recipe.cookbook.id) %>