ruby-on-rails-3 - Rails 3 基于上下文的路由

标签 ruby-on-rails-3 routing contextpath

我正在尝试实现一个类似于 GitHub 使用的“上下文”系统。例如,可以创建属于用户或用户所属公司之一的帖子,具体取决于用户是在“用户”上下文中还是引用公司之一的上下文中。

作为其中的一部分,我希望能够根据用户的当前上下文进行路由。例如,如果用户在他们自己的上下文中,/dashboard应该路由到 users/show ,但如果它们在 ID 为 35 的公司的上下文中,则 /dashboard应该路由到 companies/35/dashboard .

我可以路由 /dashboard发给负责做出此类决定的特殊控制者,例如 context#dashboard然后可以执行 redirect_to ,但这感觉不太对(也许是因为我们正在采用 Rails 路由模块应该负责的逻辑并将其移动到 Controller ?)

在 Rails 3 中解决这个问题的正确方法是什么?

最佳答案

我终于找到了我喜欢的问题的解决方案。这将使用我原始问题中的 URL。

首先,假设一个 session 存储的 Context存储用户是在“用户”上下文还是“公司”上下文中的对象。如果用户在“公司”上下文中,那么他们正在工作的公司的 ID 也在对象中。我们可以通过一个名为 get_context 的助手获取上下文。我们可以通过current_user获取当前登录的用户.

现在,我们这样设置我们的路线:
config/routes.rb :

MyApplication::Application.routes.draw do
  get "dashboard" => "redirect", :user => "/users/show", :company => "/companies/:id/dashboard"
end

现在,app/controllers/redirect_controller.rb :
class RedirectController < ApplicationController
  def method_missing(method, *args)
    user_url    = params[:user]
    company_url = params[:company]
    context     = get_context

    case context.type
    when :user
      redirect_to user_url.gsub(":id", current_user.id.to_s)
    when :company
      redirect_to company_url.gsub(":id", context.id.to_s)
    end
  end
end

将重定向的实际 URL 保留在它们所属的位置(在 routes.rb 文件中!)并且该数据被传递到 DRY Controller 是很容易的。我什至可以在路由中传入当前上下文对象的 ID。

关于ruby-on-rails-3 - Rails 3 基于上下文的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799818/

相关文章:

reactjs - 如何更改 react-router-component 上下文根

ruby-on-rails - 如何使用 Capybara 和 RSpec 检查 session 哈希?

ruby-on-rails - Rails 查询中的自定义排序

ruby-on-rails - 如何在 Rails 3 中制作自定义助手?

ruby-on-rails-3 - 如何过滤 ActiveAdmin 上的 bool 列?

xml - 如何在 Tomcat 的 web.xml 中使用变量替换作为上下文路径

routing - 如何在 Flutter 中获取当前路由路径?

routing - 有没有办法通过 DependencyInjection 从 Symfony2 包导出路由

php - 获取 Symfony 2 中路由使用的所有 URL

java - 在动态 Web 项目中设置上下文路径