Ruby on Rails的有时嵌套资源
问题描述:
在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 %>
......还是有一些更简单的方法来拆分这两种情况?看来我在视图和控制器中会有很多条件,并且不知道这是否是处理这种情况的方式。
答
这看起来很适合在WorkoutHelpers
中创建一个link_to
包装助手,您可以在其中传入@client
实例。如果它是nil
,则发出一个链接类型,否则发出另一个链接类型。然后,您可以摆脱视图中的所有条件并使其更清晰。
会更加普遍和干燥,你可以传递更多信息到他助手帮助使用正确的路径帮手,如new_workout_path
或edit_workout_path
等
同样的建议也适用于,你有一般的情况下视图中有很多类似的条件分支。
谢谢,我想我也必须为我的form_for方法做类似的事情。 – John 2010-07-23 17:59:32
您可能会发现'url_for'有助于在帮助器中构建链接。请参阅http://api.rubyonrails.org/classes/ActionController/Base.html#M000455 – bjg 2010-07-23 18:29:27