这是继承的情况吗?

发布于 2024-12-01 11:58:33 字数 650 浏览 1 评论 0原文

我有 Rails 模型 UserReadingListSessionReadingList。一个用户有很多阅读列表。 SessionReadingList 是一种特殊类型的阅读列表,用于在用户注册之前存储在会话中。

在我的 ReadingListsController 中,每个操作的形式如下:

def show
  if current_user
    #load user's reading lists
  else
    #load session reading list from session
  end
end

我想知道是否最好将 ReadingListsController 子类化,所以我有 SessionReadingListsControllerUserReadingListsController。但我不知道如何处理路由。

那么,子类化是解决方案吗?如果是这样,我是否根据 current_userReadingListsController 进行重定向?或者有更好的方法吗?

I have Rails models User, ReadingList and SessionReadingList. A user has many reading lists. A SessionReadingList is a special type of reading list for before a user has registered, stored in the session.

In my ReadingListsController every action is of the form:

def show
  if current_user
    #load user's reading lists
  else
    #load session reading list from session
  end
end

I'm wondering whether I'd be better off subclassing ReadingListsController so I have e.g. SessionReadingListsController and UserReadingListsController. I don't know how I'd handle the routing then though.

So, is subclassing the solution? If so, do I redirect from the ReadingListsController depending on current_user? Or is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

喜爱皱眉﹌ 2024-12-08 11:58:33

您可以创建使用适当控制器的自定义路由匹配器。

class LoggedInConstraint < Struct.new(:value)
  def matches?(request)
    request.cookies.key?("user_token") == value
  end
end

match 'reading-list' :to => "reading_list#index", :constraints => LoggedInConstraint.new(true)
match 'reading-list' :to => "session_reading_list#index", :constraints => LoggedInConstraint.new(true)

You can create a custom route matcher that uses the appropriate controller.

class LoggedInConstraint < Struct.new(:value)
  def matches?(request)
    request.cookies.key?("user_token") == value
  end
end

match 'reading-list' :to => "reading_list#index", :constraints => LoggedInConstraint.new(true)
match 'reading-list' :to => "session_reading_list#index", :constraints => LoggedInConstraint.new(true)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文