true 还是我没捕获要点?-6ren">
gpt4 book ai didi

ruby-on-rails - 涉及 has_many & belongs_to 关联的元编程问题

转载 作者:行者123 更新时间:2023-12-04 03:47:11 27 4
gpt4 key购买 nike

我有两个类:

class Activity < ActiveRecord::Base
belongs_to :activity_type

def belongs_to_cat_a?
self.activity_category == ActivityCategory.category_a
end

def belongs_to_cat_b?
self.activity_category == ActivityCategory.category_b
end

end

class ActivityCategory < ActiveRecord::Base
has_many :activities

def self.cat_a
ActivityCategory.find_by_name("CatA")
end

def self.cat_b
ActivityCategory.find_by_name("CatB")
end
end

使用元编程,我将 ActivityCategory 更改为以下内容:

class ActivityCategory < ActiveRecord::Base
has_many :activities

CATEGORIES = ['CatA', 'CatB']

class << self
CATEGORIES.each do |c|
define_method "#{c.underscore.downcase}" do # for ex: cat_a
find_by_name(c)
end
end
end

end

好的。现在想象在 Activity 类中,我有大约 12 个方法来检查它属于哪个类别。
似乎是使用 MP 进行 DRY'd up 的完美候选人。

我该怎么做?

最佳答案

我不确定这是 MP 的合适人选。首先,您正在对类别进行硬编码,这马上就是编写代码,而不是生成代码。如果您想在询问是否属于某个类别时返回 true/false 语句,您可以执行以下操作:

class Activity < ActiveRecord::Base
...

def belongs_to? activity
activity_type.name == activity
end

end

然后这样执行...

a = Activity.save(:activity_category => ActivityCategory.new(:name => "CatA")
a.belongs_to? "CatA" #=> true

还是我没捕获要点?

关于ruby-on-rails - 涉及 has_many & belongs_to 关联的元编程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4789235/

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