使用一段独立的代码扩展 Ruby 类

2024-01-06

我有一个 Rails 应用程序,其中有多个具有相同结构的模型:

class Item1 < ActiveRecord::Base
  WIDTH = 100
  HEIGHT = 100
  has_attached_file :image, styles: {original: "#{WIDTH}x#{HEIGHT}"}
  validates_attachment :image, :presence => true
end


class Item2 < ActiveRecord::Base
  WIDTH = 200
  HEIGHT = 200
  has_attached_file :image, styles: {original: "#{WIDTH}x#{HEIGHT}"}
  validates_attachment :image, :presence => true
end

实际的代码更复杂,但这已经足够简单了。

我想我可以将代码的公共部分放在一处,然后在所有模型中使用它。

这是我的想法:

class Item1 < ActiveRecord::Base
  WIDTH = 100
  HEIGHT = 100
  extend CommonItem
end

module CommonItem
  has_attached_file :image, styles: {original: "#{WIDTH}x#{HEIGHT}"}
  validates_attachment :image, :presence => true
end

显然它不起作用有两个原因:

  1. CommonItem不知道我调用的类方法。
  2. WIDTH and HEIGHT常量在中查找CommonItem代替Item1.

我尝试使用include代替extend,一些方法class_eval和类继承,但都不起作用。

看来我错过了一些明显的东西。请告诉我什么。


我会这样做:

class Model
  def self.model_method
    puts "model_method"
  end
end

module Item
  def self.included(base)
    base.class_eval do
      p base::WIDTH, base::HEIGHT
      model_method
    end
  end
end

class Item1 < Model
  WIDTH = 100
  HEIGHT = 100
  include Item
end

class Item2 < Model
  WIDTH = 200
  HEIGHT = 200
  include Item
end

The included当包含模块时,会在模块上调用该方法。

我想我已经成功创建了与您的问题类似的结构。该模块正在调用项目类继承的方法Model class.

Output:

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

使用一段独立的代码扩展 Ruby 类 的相关文章

  • 如何在 gem 的示例脚本中使用 pry-byebug ?

    我正在制作我的第一个 gem 它不是 Rails 应用程序 而是一个带有一些 AI 的 tic tac toe 库 这样我就可以与一个永远不会输的计算机对手比赛 并在可能的情况下强行获胜 现在我正在尝试调试人工智能中的攻击策略 但我似乎无法
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • CSS 继承、别名和其他很酷的东西

    有一天 我随机浏览网页 发现了一些程序 可以让你编写 CSS 别名和其他很酷的东西 我现在不记得了 举个例子 我记得你可以这样做 myclass background color red greenfont 其中 greenfont 在其他
  • Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

    我正在使用 Capistrano 3 与我的 Rails 应用程序一起部署 问题是 每次我将应用程序部署到服务器时 log development log 文件都会重置 我听说可以将 production log 文件放入共享文件夹中并在每
  • Rails 4 的 mobile_fu

    我正在尝试将我的应用程序从 Rails 3 2 13 切换到 Rails 4 在此过程中 我遇到了一个主要障碍 我使用 gem mobile fu 来确定用户是否来自移动设备 该 gem 需要 Railties 3 2 13 但 Rails
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • Rails 5:验证复选框的接受

    我有一个带有一些嵌套字段的注册表单 在该表单中我添加了一个服务条款的复选框 我正在尝试验证复选框何时被选中 如果没有 则返回错误 validates acceptance of agreement allow nil gt true acc
  • 为什么 JavaScript ES6 不支持多构造函数类?

    我想编写我的 Javascript 类 如下所示 class Option constructor this autoLoad false constructor key value this key value constructor k
  • Rails - 安装 Spree 时出现问题

    我在 Rails 应用程序中安装 Spree 时遇到问题 当我运行 gem spree 时 按照说明http spreecommerce com documentation getting started html http spreeco
  • 为什么||和 或 在 Rails 中的行为有所不同? [复制]

    这个问题在这里已经有答案了 可能的重复 i true 和 false 在 Ruby 中是真的吗 https stackoverflow com questions 2802494 i true and false in ruby is tr
  • 如何在生产服务器中运行 sidekiq?

    我有一个带有apache passenger的服务器 我将如何奔跑sidekiq在生产中 运行所需的任何配置 bundle exec sidekiq Thanks bundle exec sidekiq d L log sidekiq lo
  • 带回形针、导轨的水印图像 4

    我一直在尝试按照中列出的答案向我的图像添加水印带有回形针的水印 https stackoverflow com questions 13517757 watermark with paperclip 水印 rb module Papercl
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 使用redirect_to :create 动作

    我正在尝试重定向到另一个控制器的创建方法 但是 我找不到将方法设置为 POST 的方法 这将导致调用索引方法 使用 method gt post只是创建一个新参数 但不会更改 http 方法 有什么想法如何重定向到创建方法吗 您无法在重定向
  • Ruby gem 环境问题 - LoadError: no such file to load -- robots

    我正在尝试使用 anemone gem 编写一个爬虫 这需要 robots gem 不管出于什么原因 机器人绝对不会包括在内 这是我的一些环境信息 gem list d robots LOCAL GEMS robots 0 10 1 Aut
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 如何以 Rails 形式将图像从 上传到具有 Rails Active Storage 的 S3?

    正如标题中所述 我正在尝试使用 Rails 的 Active Storage 从嵌套在 Rails 表单中的元素将图像上传到我的 S3 存储桶 到目前为止我已经能够使用使用 Active Storage 上传图像 这User class h
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst

随机推荐

  • Windows 上的 pyodbc 和 python 3.4

    pyodbc 是一个非常好的东西 但是 Windows 安装程序仅适用于其非常特定的 python 版本 随着 Python 3 4 的发布 唯一可用的安装程序一旦在注册表中看不到 3 3 尽管 3 4 肯定存在 就会停止 将 pyd 和
  • Git 开发与发布分支最佳实践

    我从每个冲刺开始就一直在监控两个分支 Release and Master Master分支是开发人员创建新分支 特定于任务 实施更改并创建合并到主分支中的拉取请求的地方 Release分支是特定于冲刺的 始终可提交给生产 我们只合并致力于
  • 在asp.net mvc中是否可以制作通用控制器?

    我正在尝试创建一个通用控制器 即 public class MyController
  • 类的计数器变量

    我在运行这段代码时遇到问题 类是 Student 它有一个 IdCounter 这就是问题所在 第 8 行 class Student idCounter 0 def init self self gpa 0 self record Eac
  • 通过媒体查询或检测到手机时提供较小版本的视频

    我从 2012 年就参加过这个讨论 如何为移动设备和桌面网页版加载不同的视频 https stackoverflow com questions 10750874 how to load different video for mobile
  • 是否可以订阅用户 online_presence 的实时更新?

    我的应用程序有一个搜索功能 您可以根据各种过滤器找到用户 我最近添加了一个指示器 以便您可以查看用户是否在线 我通过获取 user online presence 权限来完成这项工作 然后在过滤结果后 使用我存储在数据库中的用户 acces
  • 为什么 Collections.Generic.Queue 没有 Synchronized 方法,但 Collections.Queue 有?

    System Collections Queue班级有Queue Synchronized http msdn microsoft com en us library system collections queue synchronize
  • java泛型,未经检查的警告

    这是 oracle 页面中教程的一部分 考虑以下示例 List l new ArrayList
  • Gimp Python 插件 gimp.Image 作为 numpy 数组

    我正在为 GIMP 开发一个 python 插件 我想以 numpy 数组的形式获取图层的 RGB 矩阵 要访问 python 插件中的层 我使用以下代码 def python function img layer layer img la
  • ASP.Net 多租户 SaaS 应用程序中的本地化 (i18N)

    问题场景 在基于 SaaS 的应用程序中实施 ASP Net 本地化 额外的复杂性 租户应该能够编辑本地化内容 因此 如果托管应用程序有 10 个租户 每个租户支持 5 种语言 那么我们最终可能会得到 50 个翻译内容单元 鉴于上述情况 请
  • 时间:2017-05-17 标签:c#visual studio 2017CPU profilingout of memory异常

    我有一个长时间运行的 C 应用程序 正在 Visual Studio 2017 社区版中对其进行分析 运行大约 2 3 小时 然后我停止分析 和应用程序 以查看 CPU 使用情况 但是我可以看到 在构建报告时 内存使用量增加了 3GB 然后
  • Swift 中的三角函数[重复]

    这个问题在这里已经有答案了 我是 iOS 的初学者开发者 我使用一些在线教程来学习 Swift 现在我正在尝试开发自己的计算器 我自己有一个任务是按下 sin 和 cos 按钮 这将返回输入值的正弦或余弦函数 当然 Swift 中有 sin
  • 将现有项目推送到Github

    我有一个包含项目源的文件夹 我如何将这个项目推送到 Github 的存储库中 我尝试使用以下步骤 我在 GitHub 上创建了空存储库 我运行 git bash 并输入git init 所以项目根目录里面出现了 git文件夹 我使用以下命令
  • 如何让闪屏加载一次?

    所以 我开发了一个运行成功的启动屏幕 我怎样才能让它运行一次 并且只运行一次 我想构建一个注册屏幕 但我只希望它为用户显示一次 Help 阿曼尼 斯旺 import android app Activity import android o
  • 什么是 LLVM?用 LLVM 替换 Python VM 如何将速度提高 5 倍?

    Google 正在赞助一个开源项目 旨在将 Python 的速度提高 5 倍 空载燕子 http code google com p unladen swallow 似乎有一个好的项目计划 http code google com p un
  • 使用 App_GlobalResources 在 ASP.NET MVC 4 中进行本地化

    我正在努力完成两件事 本地化 FieldMustBeDate 和 FieldMustBeNumeric 的 内置 错误消息 本地化您可能遇到的一些其他错误消息 例如 PropertyValueRequired 通过使用http forums
  • Android Maven 未启动模拟器

    当我右键单击我的 Android 项目并选择Run gt Android Application 模拟器启动并且更改确实反映出来 但是当我执行以下命令时 它没有反映 mvn clean install mvn android deploy
  • 在排序数组中查找总和为 X 的一对整数的函数式方法

    这是我之前的后续question https stackoverflow com questions 42272546 how to traverse array from both left to right and from right
  • 如何使用 Rails 跨多个域共享用户会话?

    是否有人知道任何宝石 教程或解决方案使用户能够在一个域中登录网站并在同一会话中自动授予对其他合作伙伴域的访问权限 我有两个正在运行的 Rails 应用程序 我们称它们为 App A 和 App B App A 有一个与之关联的数据库 支持在
  • 使用一段独立的代码扩展 Ruby 类

    我有一个 Rails 应用程序 其中有多个具有相同结构的模型 class Item1 lt ActiveRecord Base WIDTH 100 HEIGHT 100 has attached file image styles orig