嵌套路由并不意味着资源关联



为没有关联的资源创建嵌套路由是否被认为是不良实践(或非restful) ?例如:

resources :foos do
  resources :bars
end

但是我在数据库或应用程序的其他地方没有将:foos:bars关联的业务逻辑。

我想这样做的原因:我的许多路由被创建为嵌套在我的:groups资源下的资源。我这样做,以便我可以始终抓取group_id参数,并始终显示与用户当前"在"的组匹配的布局。当资源belongs_to组:

时,我对此感到满意。

/团体/1/评论/1

但是当其他一些评论没有belong_to组(group1)时,我想通过"烙"为group1的布局来查看它,我的冲动是像这样路由它:

/团体/1/评论/2

这样可以吗,也许我想多了?

我维护一个具有类似要求的应用程序。我大致做了如下的操作:

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方法以提供默认值。使用这种方法,您将需要提供一个操作来设置活动组,以便用户可以切换组(假设这是一个需求)。

这假设您有某种身份验证来了解当前用户。如果不考虑限制对组的访问,可以放弃习惯关系,用Group.first代替groups.first

如果您没有/想要/需要身份验证,您可以在会话cookie中删除active_group_id。但是我肯定认为嵌套不相关的资源是不好的做法。

最新更新