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

时间:2015-09-29 21:59:41

标签: ruby-on-rails ruby

为那些没有关联的资源创建嵌套路由会被视为不良做法(或非RESTful)吗?例如,我有:

resources :foos do
  resources :bars
end

但我的数据库或应用程序中没有其他业务逻辑将:foos:bars关联起来。

我想这样做的原因:我的许多路由都是作为嵌套在:groups资源下的资源创建的。我这样做是为了让我总能抓住一个group_id参数并始终显示一个与用户当前所在的组匹配的布局"在"中。当资源belongs_to组:

时,我对此感到很满意
  

/组/ 1 /评论/ 1

但是,当其他一些评论没有belong_to组(group1)时,我想通过布局来看待它"品牌"作为group1,我的冲动就是这样做:

  

/组/ 1 /评论/ 2

这样做可以吗,也许我会过度思考这个?

1 个答案:

答案 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即可。但我绝对认为嵌套不相关的资源是不好的做法。