1
  def index
    @workouts = Workout.all
    @user_workouts = current_user.workouts.order("created_at DESC") unless current_user.blank?
    if @client.present?
      @user_workouts = @client.workouts.order("created_at DESC")
    end

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @workouts }
    end
  end

ここで問題となるのはインスタンス変数です@user_workouts-ネストされたルートを使用して、/workoutsの代わりに/clients / 1 / workoutsのようなことを実行できるようにします。これにより、現在のユーザーのワークアウトが表示され、ネストされた場合は/users/になります。 1/ワークアウト。

これを処理する慣用的な方法はありますか、それとも条件文を忍び込ませるのが普通ですか?

4

2 に答える 2

3

インスタンスWorkoutの受け入れ時にクラスメソッドを作成できますUser

def self.for_user(user)
  where(user_id: user.id).order("created_at DESC")
end

そしてあなたの行動を単純化する

def index
  @workouts      = Workouts.all
  @user_workouts = Workout.for_user(@client || current_user)

  respond_to ...

@client存在する場合はに渡され、for_user存在しない場合はに渡されcurrent_userます。

于 2013-03-11T00:31:10.593 に答える
1

あなたはそれを少し乾かすことができます:

user = @client || current_user
@user_workouts = user.workouts.order("created_at DESC")

それ以外は、そのままでかなり良さそうです。

于 2013-03-11T00:31:10.417 に答える