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- 我正在使用嵌套路由来执行类似 /clients/1/workouts 而不是 /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 回答