为那些没有关联的资源创建嵌套路由会被视为不良做法(或非RESTful)吗?例如,我有:
resources :foos do
resources :bars
end
但我的数据库或应用程序中没有其他业务逻辑将:foos
与:bars
关联起来。
我想这样做的原因:我的许多路由都是作为嵌套在:groups
资源下的资源创建的。我这样做是为了让我总能抓住一个group_id
参数并始终显示一个与用户当前所在的组匹配的布局"在"中。当资源belongs_to
组:
/组/ 1 /评论/ 1
但是,当其他一些评论没有belong_to
组(group1)时,我想通过布局来看待它"品牌"作为group1,我的冲动就是这样做:
/组/ 1 /评论/ 2
这样做可以吗,也许我会过度思考这个?
答案 0 :(得分:1)
我维护了一个具有类似要求的应用。我大致按照以下方式做了一些事情:
class User
has_and_belongs_to_many :groups
belongs_to :active_group, class_name 'Group'
def active_group
return super unless super.nil?
group = groups.first
update_columns(active_group_id: group.id)
group
end
end
User
类验证它们是否已分配给一个或多个组,并且active_group
方法被覆盖以提供默认值(如果它是第一次登录)。使用此方法,您需要提供一个操作来设置活动组,以便用户可以切换组(可能这是一个要求)。
这假定您具有某种身份验证以了解当前用户。如果不考虑限制对群组的访问,则可以放弃habtm关系,并将groups.first
替换为Group.first
。
如果您没有/想要/需要身份验证,则只需在会话Cookie中删除active_group_id
即可。但我绝对认为嵌套不相关的资源是不好的做法。