2013-03-11 47 views
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 - 我使用嵌套的路線能夠做/像客戶端/ 1 /鍛鍊而不是/鍛鍊,這將顯示當前用戶的鍛鍊,如果這是嵌套將是/用戶/ 1 /鍛鍊。有沒有一種更習慣的方式來處理Rails中的這個控制器邏輯?

任何處理這種情況的慣用方法,或者只是讓條件變得很正常嗎?

回答

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意志。

+0

看起來很漂亮,謝謝。 – 2013-03-11 04:57:16

1

你可以擦乾了一個小有:

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

除此之外,它看起來相當不錯原樣。

相關問題