在 Ruby on Rails 中的控制器之间重用代码的最佳实践

2023-12-19

我想分享一些控制器方法。在 ruby​​ on Rails 中执行此操作的最佳实践是什么?我应该创建一个控制器扩展的抽象类,还是应该创建模块并将其添加到每个控制器中?下面是我想分享的控制器方法:

def driving_directions
  @address_to = params[:address_to]
  @address_from = params[:address_from]
  @map_center = params[:map_center_start]

  # if we were not given a center point to start our map on
  # let's create one.
  if !@map_center && @address_to
    @map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_to).ll
  elsif !@map_center && @address_from
    @map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_from).ll
  end
end

def printer_friendly
  starting_point = params[:starting_point].split(',').collect{|e|e.to_f}
  ne = params[:ne].split(',').collect{|e|e.to_f}
  sw = params[:sw].split(',').collect{|e|e.to_f}
  size = params[:size].split(',').collect{|e|e.to_f}
  address = params[:address]

  @markers = retrieve_points(ne,sw,size,false)
  @map = initialize_map([[sw[0],sw[1]],[ne[0],ne[1]]],[starting_point[0],starting_point[1]],false,@markers,true)
  @address_string = address
end

在我看来,正常的 OO 设计原则适用:

  • 如果代码确实是一组不需要访问对象状态的实用程序,我会考虑将其放在一个模块中单独调用。例如,如果代码都是映射实用程序,则创建一个模块Maps,并访问以下方法:Maps::driving_directions.
  • 如果代码需要状态并且已在或可以在每个控制器中使用,请将代码放入 ApplicationController 中。
  • 如果代码需要状态并且在逻辑上密切相关的所有控制器的子集中使用(即所有关于映射),则创建一个基类(class MapController < ApplicationController)并将共享代码放在那里。
  • 如果代码需要状态并且在所有关系不太密切的控制器的子集中使用,请将其放入模块中并将其包含在必要的控制器中。

在你的情况下,这些方法需要状态(params),所以选择取决于需要它的控制器之间的逻辑关系。 此外:

Also:

  • 如果可能,请对重复代码使用部分代码,并将其放置在公共“部分”目录中或通过特定路径包含。
  • 尽可能坚持 RESTful 方法(对于方法),如果您发现自己创建了很多非 RESTful 方法,请考虑将它们提取到自己的控制器中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ruby on Rails 中的控制器之间重用代码的最佳实践 的相关文章

  • 在Rails 3中,如何使用button_to更改布尔值?

    我正在尝试编写一个button to 语句来更新我的activerecord 数据库中的布尔值 这是我尝试过的 从更大的角度来看 我想做的是有一个按钮可以更新支付对象并触发对宝石汇款与亚马逊支付进行通信的私有方法的调用 所以 1 如何使用b
  • 无法在 Windows 7 上安装 Rmagick 和 Imagemagick

    当我跑步时gem install rmagick 2 13 1 gem从 rmagick 2 13 1 gem 所在的目录中 我收到一个错误 指出它无法构建 gem 本机扩展 下面显示 c Ruby192 bin ruby exe extc
  • :autosave 忽略了 has_many 关系——我错过了什么?

    我有两门课 class Collection lt ActiveRecord Base has many items autosave true end class Item lt ActiveRecord Base belongs to
  • 从邮件程序访问助手?

    我试图从 Rails 3 邮件程序访问帮助程序方法 以便访问会话的当前用户 我将 helper application 放在我的邮件程序类中 这似乎可以工作 但其中定义的方法对我的邮件程序不可用 我收到未定义的错误 有谁知道这应该如何运作
  • 使用 Ruby Curb 传递 GET 参数

    我正在尝试使用 Curb curb rubyforge org 调用需要在 get 请求中提供参数的 RESTful API 我想获取一个像这样的URLhttp foo com bar xml bla blablabla 我希望能够做类似的
  • 创建并初始化具有连续名称的类的实例

    我有一个BankAccount班级 我试图创建这个类的多个实例并将它们放入一个数组中 例如 accounts Ba1 BankAccount new 100 Ba2 BankAccount new 100 我想初始化包含大量实例的数组 假设
  • 设计忽略我的自定义策略

    我想创建一个用于访问 API 的自定义身份验证策略 我按照示例代码进行操作设计忽略自定义策略 https stackoverflow com questions 3503827 devise ignoring custom strategy
  • Rails 4 - 如何在活动记录查询中为includes()和joins()指定别名

    我如何给出别名 例如includes 给出如下 用户 活动记录模型 Student 活动记录模型 继承自User STI Teacher 活动记录模型 继承自User STI 项目 活动记录模型 这里有一些例子 第一个案例 更多性传播感染协
  • 安装 RVM 时出现问题

    我已按照 rvm 网站上的说明执行了命令 但似乎不起作用 从 git 存储库获取代码运行顺利 但是当我尝试使用时 rvm notes Error usr local bin rvm line 73 home cody rvm scripts
  • Ruby 混淆器 [重复]

    这个问题在这里已经有答案了 是否有 ruby 混淆器或 编译器 有几个选项 例如RubyScript2Exe http www erikveen dds nl rubyscript2exe or 多合一红宝石 http www erikve
  • 需要帮助设置 ruby​​ on Rails javascript 运行时环境

    我在我的机器上设置 ruby on Rails 时遇到问题 我一直在关注 Agile Web Development with Rails 这本书 到目前为止一切都进展顺利 我遇到的问题是当我输入时 rails server 我收到以下错误
  • 在 Rspec 中测试 STDOUT 输出

    我正在尝试为这个声明建立一个规范 使用 看跌期权 很容易 print file doesn t exist Create Empty File y n RSpec 3 0 RSpec 3 0添加了一个新的output matcher htt
  • 是否可以下载 Ruby gem 而不自动安装它?

    当我使用下载东西时gem我希望能够只下载 gem 然后选择是否要安装它 我问这个问题是因为我想在多台计算机上安装特定的 gem 而不是在每台计算机上从互联网安装 宝石获取 所以 像 gem fetch gosu 这将离开gosu 0 7 1
  • ActiveStorage上传大型base64编码字符串?

    如果我有在客户端上使用 JavaScript 编辑 生成的图像 例如 裁剪的照片或画布绘图的结果 是否可以使用 ActiveStorage 上传它 它通常是一个包含以下内容的大字符串 img src 它存储在 JavaScript 变量中
  • Rails 中多表单复选框的数据库结构

    我正在开发一个 Rails 应用程序 允许用户创建时间表 这样做时 他们应该能够选择事件发生在一周中的哪几天 我计划在表单中执行此操作的方式是每个工作日旁边有一个复选框 如下所示 etc 然而 我发现这可能不是处理这个问题的非常有效的方法
  • Ruby on Rails 是否会使来自外部域的 Graphql 控制器中的会话无效?

    我有一个在不同域上运行的 Rails graphql 服务 但会话变量似乎在graphql controller rb为零 当我在本地运行服务时 会话和上下文按预期工作 这是一个例子 in graphql controller def ex
  • Rails:控制文件存储缓存大小

    Rails 中基于文件的缓存的文档说 请注意 缓存将不断增长 直到磁盘已满 除非您 定期清除旧条目 不幸的是 它没有提供任何有关如何定期清除旧条目的信息 是否设置合适的值 expires in完成这项工作还是清除缓存背后还有其他某种黑魔法
  • 如何在 Ruby 中访问私有类方法?

    给定一个 Ruby 类 class MyClass def self my class method puts class method end private def my method puts regular method end p
  • Rails3-jquery-autocomplete 如果没有可用数据则清除字段

    我正在使用rails3 jquery autocomplete 如果自动完成没有返回结果 是否可以清除自动完成字段的值 我试图阻止用户提交数据库中没有的值 我使用的是旧版本 但我实现了change处理程序autocomplete call
  • Rails:与自身的多对多关系

    我在创建此关联时遇到问题 考虑模型 Entry 我希望条目有许多作为父母的条目 并且我希望条目有许多作为孩子的条目 我想通过一个我称为 关联 的模型来实现这种关系 所以这是我尝试的 移民 class CreateAssociations l

随机推荐