基于上下文的 Rails 3 路由

2023-12-25

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

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

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

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


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

首先,假设一个会话存储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

Now, 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 控制器。我什至可以在路由中传入当前上下文对象的 ID。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于上下文的 Rails 3 路由 的相关文章

  • rvm + Rails3 + gmaps4rails -acts_as_gmappable

    我是一个红宝石导轨之类的菜鸟 抱歉 如果我的问题很愚蠢 我设置了一个运行 ruby 1 8 7 p334 的 rvm 作为用户 环境 我已经为我的 应用程序 创建了一个 gemset 现在我想在页面上显示地址的地图 我四处寻找 发现了 gm
  • 如何创建不覆盖其他控制器路由的 Codeigniter 路由?

    我的 Codeigniter 应用程序中有很多控制器 例如 注册 个人资料 主要等 现在我想建立 User 控制器 我想要的是 如果人们访问网址 example com signup 我想使用默认路由到 Signup 控制器 如果人们访问网
  • Rspec 通过 mTurk 测试实时结果

    我正在通过 Rspec 测试代码在 mTurk 上创建点击 但同时我需要测试必须从 mTurk 发回的结果 为了节省每次测试的复杂性 我使用 VCR 将 HTTP 请求记录在盒式磁带中 我该如何实施这个测试 好吧 我为此做了一些修改 我使用
  • Rails3 中带有块的 link_to 的语法,其中 :remote=>true 并包括 :class 和 :id

    看在上帝的份上 我已经为此绞尽脑汁好几个小时了 使用rails3 rc 1 9 2 我正在尝试创建一个 link to 来提交一个ajax请求 其中包含参数 类和id 并且需要一个块 以便我可以在名称周围插入一个span标签 文档的帮助绝对
  • 未定义的方法“collection_check_boxes”

    我正在尝试制作一个发票应用程序 创建发票的表单应包含一组复选框 以便用户可以选择要开具发票的课程 但我收到此错误 undefined method collection check boxes 以下是涉及的模型 class Lesson l
  • flash[:notice] 不适用于redirect_to

    我正在从控制器状态使用 flash notice message redirect to controller item action list 不知道为什么通知不显示 我尝试并检查了很多事情 flash keep flash keep n
  • 自定义收集路径的polymorphic_path

    我有以下路线定义 resources documents do collection do post filter end end 以及以下模型结构 class Document lt ActiveRecord Base belongs t
  • Rails 3:使用 AJAX 请求更新 URL 参数

    我有一个过滤器和一个产品列表 id 名称 创建日期 我可以按 ID 名称或创建日期进行过滤 通过 AJAX 请求 我更新了内容 div 但显然 URL 没有改变 如何将参数附加到 URL 例如 localhost 3000 dashboar
  • 带有日期的铁路路线

    因此 我有一个每周日历视图 并且设置了一条路线来接受 year month day 作为开始日期 match events year month day gt events index constraints gt year gt d 4
  • 为什么我不能让 rake db:migrate 为 ruby​​.railstutorial.org 工作

    我决定完成教程 创建新应用程序并添加新应用程序后user string email string然后执行rake db migrate在应用程序目录中 我得到以下输出 rake aborted undefined method task f
  • Angular - UI 路由器路由 - HTML5 模式

    我正在尝试在我的 Angular 应用程序中使用 HTML5 推送状态链接 我拥有的是一系列类似于以下的路线 stateProvider state product url product productCode templateUrl p
  • Rails 从视图中调用操作

    希望这里有一个简单的问题 但我似乎无法找到答案 刚刚开始使用 RoR 但之前来自 ASP MVC 我在渲染部分视图时遇到问题 其局部变量不一定与主视图的变量相关联 例如 对于一个博客 我试图渲染一个链接到存档的侧边栏 def sidebar
  • GET 和 POST 方法的单独 Flask 路由

    在 Flask 中定义路由时 最好的做法是使用由多个 HTTP 方法定义的单个路由 并在该单个路由中使用显式逻辑处理不同的 HTTP 方法 例如 app route api users methods GET POST def users
  • 控制器名称是从类名称派生的吗?

    这是一个新手问题 我正在查看默认的 asp net mvc3 项目 注意到有一个名为 public class AccountController Controller 我查看了整个代码 找不到指定 AccountController 映射
  • 资产管道中的路由助手

    使用 Rails 3 1 0 rc4 我尝试访问 javascript 文件中的路由助手 本例中为 event js erb 但似乎此时它们尚未加载 当请求合并的 assets application js 文件时 我得到 throw Er
  • Laravel 4 路由 404 错误

    当我路由到某个页面时 我无法让 Laravel 找到该页面 我的路线已设置并被识别 当我使用 URL route account create 创建链接时 laravel 会成功地将其解析为 account create 以了解我希望链接转
  • Ruby on Rails content_for 会自动进行 HTML 转义吗?

    使用 Rails 3 0 6 我发现在视图中 如果我执行 content for food name Macaroni Cheese 然后当我使用它回来时content for food name 那么 将被制作成 amp 已经 如果我做一
  • Laravel 5 - URL 查询字符串的 NGINX 服务器配置问题

    Laravel 没有从 URL 查询字符串接收任何 GET 变量 GET 和 Input all 为空 Example example app ex login php country US country US 从未出现在我的 GET 变
  • Rails 3 - “无法解析 Yaml”

    我不知道我做错了什么 我尝试运行 rails c 但它只是给了我一个错误 10 分钟前它还在工作 C Ruby192 lib ruby 1 9 1 psych rb 148 in parse couldn t parse YAML at l
  • ActiveRecord:向包含的 ON 子句添加条件

    我有一个模型报价和另一个历史报价 一个报价有很多历史报价 现在 我想立即加载一组报价的某一天的历史报价 如果存在 为此 我认为我需要将这一天传递给 ON 子句 而不是 WHERE 子句 以便我获得所有报价 即使在给定日期没有历史报价时也是如

随机推荐

  • 在 Excel 中,如何以编程方式编辑包含超链接的单元格区域中的地址?

    我有一列包含超链接 我想以编程方式搜索并替换超链接地址 地址本身 而不是要显示的文本 我该怎么做呢 通过修改范围对象的超链接元素的 地址 属性 超链接是一个集合 因此如果您的范围是单个单元格 您将选择第一项 但它允许您轻松循环遍历给定范围或
  • 将所有绘图输出重定向到特定文件

    我想自动重定向all绘制到文件 原因 见下文 有没有一种非 hacky 的方法来实现这一点 缺少这一点 我实际上并不害怕覆盖内置函数 我that绝望的 我能想到的最简单的方法是连接到基本的绘图窗口创建函数并调用pdf 然后连接到绘图完成函数
  • Firebase 如何保护数字数据免遭用户操纵,例如。比赛得分

    我正在使用 Firebase 开发一款多人游戏 每场比赛结束后 玩家得分都会记录在 firebase 中 并且playerTotalScore 字段也会更新为新的总分 我的问题 是否可以仅使用 firebase 安全规则来保护 player
  • 当我们定义柯里化风格的函数时,我们可以声明参数的类型吗?

    如果我定义一个带有元组样式参数的函数 我可以定义参数类型和返回类型 fun hello name String code int String hello 但如果我使用咖喱风格 我只能这样做 fun hello name code hell
  • 删除网页抓取中的换行符

    我正在尝试抓取棒球阵容数据 但只想返回球员姓名 然而 截至目前 它给了我 位置 换行符 名称 换行符 然后是击球方 例如我想要 D Fletcher 但我得到 LF nD Fletcher nR 此外 它还为我提供了页面上的所有玩家 我最好
  • 替换文件中的一行而不重写整个文件(在 PHP 中)

    假设我有一个大小适中的文本文件 850kb 10 000 多行 我想替换文件中分布的特定行 或几行 当前执行此操作的方法包括重写整个文件 我当前使用的方法是逐行读取整个文件 写入 tmp 文件 完成后 我将 tmp 文件重命名 为原始源文件
  • 用 Scala 编写的 Kafka Consumer for Spark API 0.10:自定义 AVRO 反序列化器

    我正在将 Spark Scala 应用程序 Kafka API 升级到 v 0 10 我曾经创建自定义方法来反序列化字节字符串格式的消息 我意识到有一种方法可以将 StringDeserializer 或 ByteArrayDeserial
  • java中如何检查空格

    String selectedVal for SelectItem item filterItems selectedVal item getValue toString break 我得到 selectedVal 如何检查 java 中的
  • ReyclerView 无法正常工作

    我正在尝试在 recyclerview 上显示我的模型列表 但由于某种原因它没有显示任何内容 我从 FirebaseDatabase 获取列表项并将所有数据保存在 videoList 上 然后我想展示我收到的数据 但它没有显示任何内容 请告
  • 通过IdentityServer认证后如何在WebAPI控制器上获取用户信息?

    在我的客户端应用程序成功通过 IdentityServer3 进行身份验证后 我无法在 WebAPI 控制器上获取用户信息 以下是步骤 使用配置文件和访问令牌登录 成功JavaScript 隐式客户端 https github com Id
  • 非模板类中任意类型的C++成员变量

    有没有某种方法可以在类中存储模板或自动变量而不使该类成为模板 我试图存储一个指向 STL 随机数生成器之一的指针 但我无法找出任何方法来做到这一点 而不将整个类变成模板 这不是一个选项 因为将 cpp 中的所有内容移动到 h 文件会导致大量
  • 当 n 可能为零时,如何对(在 Python 中)“除最后 n 项之外的所有项”进行切片? [复制]

    这个问题在这里已经有答案了 我有一个 Python 项目列表 我需要获取 除最后 N 之外的所有项目 当 N 为零 在这种情况下我想要整个列表 以及当 N 大于或等于列表的长度 在这种情况下我想要一个空列表 时 它需要工作 这在大多数情况下
  • 使用 PGP/MIME 签署多部分邮件

    我正在尝试在 php 中使用 PGP 签署邮件 我可以使边界和标头正常工作 但邮件签名无效 如 Thunderbirds Enigmail 所述 我想问的是 签字的部分是什么 签字时要注意什么 目前生成的邮件的来源如下所示 文本和签名被占位
  • 如何在SqlAlchemy中更新所有行的一列数据?

    对于单条记录更新 我尝试了以下代码并且它有效 uid 1 info Info query filter by id uid first info sold status 1 db session add info db session co
  • Android Q(API 级别 29)不会加载 HTTPS 网站。给出错误:(net::ERR_ACCESS_DENIED) [重复]

    这个问题在这里已经有答案了 我正在尝试修复一个issue https stackoverflow com questions 58899869 webpage not available webview android 58900009 5
  • 教义如何使用ANY_VALUE mysql函数

    自 mysql 5 7 5 起 group by 发生了变化 https dev mysql com doc refman 5 7 en group by handling html https dev mysql com doc refm
  • 通过 HTML5 本地存储实现同步原语

    考虑这样一种情况 浏览器有两个或多个选项卡指向同一源 不同选项卡的不同事件循环可能会在访问本地存储时导致竞争条件 并且不同选项卡可能会覆盖本地存储中彼此的更改 我正在编写一个将面临此类竞争条件的 Web 应用程序 因此我想了解在这种情况下可
  • 有没有办法在 Go 项目上为导入提供可重用的路径?

    我对 Go 很陌生 需要一些帮助来使导入路径在我的团队之间更容易分配 目前 在我的一个 Go 文件的顶部 我有一个导入 例如 github teamName com teamMemberA HeartThrob c 我将他的项目分叉为我自己
  • 将字符串分离到 r 中的列表中

    我在 R 中有一个字符串 如下所示 PP BGH AC ETL D 我想将其转换为列表 以便 List 1 PP List 2 BGH List N D 如果有逗号 你可以执行 strsplit 但我想保留括号而不是删除它们 不知道如何在
  • 基于上下文的 Rails 3 路由

    我正在尝试实现一个类似于 GitHub 使用的 上下文 系统 例如 可以创建属于用户或用户所属的公司之一的帖子 具体取决于用户是在 用户 上下文中还是在引用公司之一的上下文中 作为其中的一部分 我希望能够根据用户当前的上下文进行路由 例如