gpt4 book ai didi

ruby-on-rails - Rails 元编程 : How to add instance methods at runtime?

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:53 27 4
gpt4 key购买 nike

我正在 Rails 中定义我自己的 AR 类,它将包括为用户字段 0-9 动态创建的实例方法。用户字段不直接存储在数据库中,它们将一起序列化,因为它们不经常使用。以下是执行此操作的最佳方法吗?替代方案?

应该从哪里调用添加方法的启动代码?

class Info < ActiveRecord::Base

end

# called from an init file to add the instance methods
parts = []
(0..9).each do |i|
parts.push "def user_field_#{i}" # def user_field_0
parts.push "get_user_fields && @user_fields[#{i}]"
parts.push "end"
end

Info.class_eval parts.join

最佳答案

一个不错的方法,尤其是当您可能有超过 0..9 个用户字段时,将使用 method_missing:

class Info
USER_FIELD_METHOD = /^user_field_(\n+)$/
def method_missing(method, *arg)
return super unless method =~ USER_FIELD_METHOD
i = Regexp.last_match[1].to_i
get_user_fields && @user_fields[i]
end

# Useful in 1.9.2, or with backports gem:
def respond_to_missing?(method, private)
super || method =~ USER_FIELD_METHOD
end
end

如果您更喜欢定义方法:

10.times do |i|
Info.class_eval do
define_method :"user_field_#{i}" do
get_user_fields && @user_fields[i]
end
end
end

关于ruby-on-rails - Rails 元编程 : How to add instance methods at runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com