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

标签 ruby-on-rails metaprogramming

我有两个类:

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/

相关文章:

ruby-on-rails - PDFTK 服务器生成空 pdf(El Capitan 问题)

ruby-on-rails - 测试数据库时 Rails 控制台错误

ruby - 使用一组可以调用另一个类方法的方法创建一个 Mixin

c++ - 从 mpl::vector 生成 fusion::vector

c++ - 元多运算符重载

html - 如何使用 rails 调用修复困惑的页面?

ruby-on-rails - 如何在 Ruby on Rails 中将\r\n 转换为简单格式的 <p>?

python - 转换类名中的字符串(从 appengine 数据存储到类)

python - 在运行时用函数重载方法

ruby-on-rails - 菠菜与 cucumber 在 Rails 中的 BDD