我希望这个问题不是太主观,但是这里有。
为简单起见,我有一个包含许多嵌套资源的User模型。例如,@ user有很多@books,@ cars,@ friends。
在用户的“show”视图中,我向用户显示一个仪表板,该仪表板显示所有事物(书籍,汽车和朋友)的小部件。
我现在的问题是UsersController必须执行与书籍,汽车和朋友有关的任何/所有逻辑。在BooksController中放置Books等逻辑只是感觉不对。
答案 0 :(得分:1)
在rails中,您可以在路由中使用嵌套资源,如此
resources :users do
resources :books
end
这会给你类似的东西
/users/id_of_user/books
哪个会触及您的图书控制器的索引,只需检查图书控制器中的user_id可用性,然后获取附加到当前用户的所有图书。
使用您的控制器并以这种方式进行路由,您可以轻松地将逻辑分散到更适合的控制器,并使其远离用户控制器。
查看下面的文档,了解更多信息,例如新嵌套路径的snazy帮助程序。 http://guides.rubyonrails.org/routing.html#nested-resources
答案 1 :(得分:-1)
评论后不久,我在Rails指南中找到了:before_filter。使用此方法,您可以根据是否找到嵌套资源以及相关模板来调用操作。这就是我做的,对我来说效果很好!
before_filter :user_resource
def user_resource
return unless params[:user_id]
redirect_to root_url and return unless params[:user_id] == current_user.id.to_s
action = :"user_#{params[:action]}"
if self.methods.include? action
self.send action
render action
end
end
以及它调用的方法示例
def user_index
ads = Classified.where(:owner_id => params[:user_id])
@classifieds = ads
end