假设我们有一个名为"Items"的表、一个名为"Name"的列和一个名为"Quantity"的列.

然后假设我们有一个这样的item实例:

@item = Item.first

在此实例中,您可以调用方法,例如:

@item.name.present?
@item.quantity.is_a?(Integer)

如何将我自己的方法添加到所有列,例如,如果我想调用:

@item.name.custom_method?
@item.quantity.custom_method?
@item.name.custom_method_2(:xyz)
@item.quantity.custom_method_2(:xyz)

所以我想给所有的columns属性添加方法,每一个都做一个自定义的事情.我见过一些gem,Rails用dirty做了,比如给columns/attributes添加changed?.

推荐答案

你可以定义一个叫做attribute methods的变量,它将依次为所有属性定义方法:

# app/models/model.rb

class Model < ApplicationRecord
  attribute_method_suffix "_is_custom?"

  private

  def attribute_is_custom? attr
    "#{attr} is custom."
  end
end
>> Model.first.name_is_custom?
=> "name is custom."
>> Model.first.id_is_custom?
=> "id is custom."

100

Ruby-on-rails相关问答推荐

Rails 7.1,登录到STDOUT和LOG/Production.log

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

使用拆分成多个部分的种子文件进行Rails数据种植

无法加载此类文件 -- mysql2/mysql2

带有 simple_form 的按钮内的 HTML 代码

Time.zone.now.to_date 是否等同于 Date.today?

骨干model.destroy()即使工作正常也会调用错误回调函数?

$redis 全局变量与 ruby​​ on rails

如何在 Linux 上使用 Ruby 2.0 改进独角兽进程之间的内存共享

使用回形针调整图像大小

不带参数的 request.fullpath

如何在 Rails 中验证日期以使其在今天之后?

我收到在扫描下一个令牌时发现无法启动任何令牌的字符

如何在 Ruby 中生成随机日期?

Django 还是 Ruby-On-Rails?

您将如何在 RoR 中创建类似 SO 或 Facebook 的通知系统?

非持久 ActiveRecord 模型属性

submit_tag rails 表单中的 bootstrap 图标

如何为 Rails 控制器添加延迟以进行测试?

如何从 ApplicationHelper 调用 ApplicationController 方法