0

私のモデルは、 User < Assignments > Course > Level > Step のように設定されています。平易な英語では、ユーザーは課題を作成するコースを受講します。その課題には多くのレベルと多くのステップがあります。データベースのフィールドを変更できるように、現在のユーザーの現在のステップにアクセスしようとしています。

class User < ActiveRecord::Base
  has_many :assignments, dependent: :destroy
  has_many :courses, through: :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :course
end

class Course < ActiveRecord::Base
  has_many :assignments
  has_many :users, through: :assignments
  has_many :levels
  accepts_nested_attributes_for :levels, allow_destroy: true
end

class Level < ActiveRecord::Base
  belongs_to :course
  has_many :steps
  accepts_nested_attributes_for :steps, allow_destroy: true
end

class Step < ActiveRecord::Base
  belongs_to :level
end

私のステップモデルには、ユーザーのステップが完了したかどうかを決定する「状態」と呼ばれるフィールドがあります。現在のユーザーのステップの「状態」にアクセスしようとしているので、変更したり、次のように表示したりできます。お願いします。これを行うには、コントローラーでユーザーの現在のステップを取得する必要があります (現在のステップだけでなく、すべての人の値が変更されます)。

class StepsController < ApplicationController   
    before_filter :authenticate_user!

    def show
        @course = Course.find(params[:course_id])
        @level = Level.find(params[:level_id])
        @step = Step.find(params[:id])
        @step_list = @level.steps
            // the above all work fine up to this point
        @assignment = Assignment.find(params["something goes here"])
        @user_step = @assignment.@course.@level.@step
    end

end

もちろん、これは機能しません。上記の情報が与えられた場合、@user_step はどのように記述すればよいでしょうか?

4

2 に答える 2

0

current_user はありますか? 次に、おそらくこれを行うことができるはずです:

course = current_user.courses.find(params[:course_id])
level = course.levels.find(params[:level_id])
step = level.steps.find(params[:id])

# Do something with the step ...

割り当てモデルを通過する必要はありません。これは、ユーザーとコースを接続する単なる結合モデルです。

于 2013-09-26T06:25:58.867 に答える