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 / workouts。
任何惯用的方法来处理这个或者只是让条件进入是正常的吗?
答案 0 :(得分: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
。
答案 1 :(得分:1)
你可以用以下方式干掉它:
user = @client || current_user
@user_workouts = user.workouts.order("created_at DESC")
除此之外,它看起来很不错。