0

トリプル ネストされたルートの link_to にどのオブジェクトを渡す必要がありますか? エクササイズショーのページを取得したい。

show.html.erb - ワークアウト

<%= link_to exercise.name, plan_workout_exercise_path(???) %>

ルート.rb

resources :plans do
 resources :workouts do
   resources :exercises
 end
end

ワークアウト_コントローラー.html.erb

def show
    @workout = Workout.find(params[:id])  
end

私は次のことを試みましたが、正しい ID を正しいモデルにフィードしません。

<%= link_to exercise.name, plan_workout_exercise_path(@plan, @workout, @exercise) %>
4

3 に答える 3

1

あなたが使用している場合、exercise.name私はあなたがのようなループを通過していると仮定していますよ@workout.exercises.each do |exercise|ね?

ただし、コントローラーで @plan を定義する必要があります。

def show
  @plan = Plan.find(params[:plan_id])
  @workout = @plan.workouts.find(params[:workout_id])
end

それで、

<%= link_to exercise.name, plan_workout_exercise_path(@plan, @workout, exercise)
于 2013-03-14T22:00:01.097 に答える
1

また@plan、show アクションに参加する必要があります。

ワークアウト_コントローラー.rbで:

def show
    @plan = Plan.find(params[:plan_id])
    @workout = Workout.find(params[:id])
end

あなたの exercise_controller.rb で

def show
    @plan = Plan.find(params[:plan_id])
    @workout = Workout.find(params[:workout_id])
    @exercise = Exercise.find(params[:id])
end

また、次のようにすることもできます。

<%= link_to exercise.name, [@plan, @workout, exercise] %>

推奨事項: RailsForZombies 2のスライドを入手してみてください。ネストされたルートを処理する方法についての優れたセクションがあるか、ガイドを参照してください。

また、よりクリーンなコードを作成するために、コールバック関数を使用して@planおよびworkout_controller.rb@plan取得します。@workoutexercise_controller.rbbefore_filter

class WorkoutsController < ApplicationController

    before_filter :get_plan

    def get_plan
        @plan = Plan.find(params[:plan_id])
    end

    def show
        @workout = Workout.find(params[:id])
    end

end

トーマスが言ったように、深くネストされたルートを避けてください。

于 2013-03-14T21:57:26.187 に答える
1

トリプル ネストを回避する 1 つの可能性は、ルートを次のように構成することです。

resources :plans do
  resources :workouts, except: [:index, :show]
end

resources :workouts, only: [:index, :show] do
  resources :exercises
end

1 レベルのネストとはるかに簡単なリンク ヘルパーだけで、いつでもそれを乗り切ることができます。

<%= link_to 'Create a new workout', new_plan_workout_path(@plan) %>
<%= link_to workout.name, workout_path(@workout) %>

<%= link_to 'Create a new exercise', new_workout_exercise_path(@workout) %>
<%= link_to exercise.name, workout_exercise_path(@workout, @exercise) %>
于 2013-03-14T22:04:41.207 に答える