2010-07-23 151 views
0

在Ruby on Rails应用程序我的工作(2.3.8),我有可以锻炼Ruby on Rails的有时嵌套资源

class Workout < ActiveRecord::Base 
    belongs_to :user 
end 

模型用户我也有Trainer->客户关系(都通过连接表与用户模型绑定) 用户可以为自己添加锻炼,但教练还可以为其客户添加锻炼。

我已经设置了路线如下:

map.resources :workouts 
map.resources :clients, :has_many => 'workouts' 

路线的这两套工作(即/锻炼和/客户/ 1 /锻炼)。我已经更新了workouts_controller使取决于是否有一个CLIENT_ID我将展示一组不同的锻炼

def index 
    if(params[:client_id]) 
     @workouts = Workout.find_all_by_user_id(params[:client_id]) 
    else 
     @workouts = Workout.find_all_by_user_id(@current_user.id) 
end 

我的问题是,如何设置我的意见正确工作。根据我得到索引的方式,我想以不同方式链接到添加或编辑屏幕。我应该只是有条不紊地做...

<% if (@client.nil?) %> 
    <%= link_to 'New workout', new_workout_path %> 
<% else %> 
    <%= link_to 'New workout', new_client_workout_path(@client) %> 
<% end %> 

......还是有一些更简单的方法来拆分这两种情况?看来我在视图和控制器中会有很多条件,并且不知道这是否是处理这种情况的方式。

回答

1

这看起来很适合在WorkoutHelpers中创建一个link_to包装助手,您可以在其中传入@client实例。如果它是nil,则发出一个链接类型,否则发出另一个链接类型。然后,您可以摆脱视图中的所有条件并使其更清晰。

会更加普遍和干燥,你可以传递更多信息到他助手帮助使用正确的路径帮手,如new_workout_pathedit_workout_path

同样的建议也适用于,你有一般的情况下视图中有很多类似的条件分支。

+0

谢谢,我想我也必须为我的form_for方法做类似的事情。 – John 2010-07-23 17:59:32

+0

您可能会发现'url_for'有助于在帮助器中构建链接。请参阅http://api.rubyonrails.org/classes/ActionController/Base.html#M000455 – bjg 2010-07-23 18:29:27