【问题标题】:Ruby metaprogramming to generate ActiveRecord associations on a given model?Ruby 元编程在给定模型上生成 ActiveRecord 关联?
【发布时间】:2012-07-30 19:04:15
【问题描述】:

我正在将我的应用程序的一部分提取到 Gem 中,这涉及创建一些新的 ActiveRecord 模型。目前这些模型看起来像这样:

Class Wordcount < ActiveRecord::Base
  belongs_to :keyword
  belongs_to :article
end

Class Keyword < ActiveRecord::Base
  has_many :wordcounts
  has_many :articles, :through => :wordcounts
end

gem 将连接到任何带有字符串或文本字段的 ActiveRecord 模型,而不仅仅是我在现有 Rails 应用程序中定义的Article 模型,该代码来自该应用程序。

我需要做什么才能根据 gem 的功能应用到的模型生成相关的 AR 关联?我希望最终得到:

has_my_gem_functionality :on => [:field1, :field2, ...]

并将其余部分安全地封装在 gem 中。

我假设我还必须对迁移进行元编程。我认为我想做的事情相对简单,只是离我的舒适区有点太远了。

【问题讨论】:

  • 您能否更具体地说明此 gem 可能需要进行哪些迁移?
  • 因此迁移在很大程度上将独立进行:向wordcountskeywords 表添加列。他们还需要用于连接到的表的外键,即目前的:article。我实际上对此不确定,抱歉:当您有 belongs_tohas_many 关联时,哪些表(或两者?)需要外键?

标签: ruby-on-rails ruby activerecord gem metaprogramming


【解决方案1】:

使用源代码,卢克! :)

看看其他一些做类似事情的宝石的来源。例如:

【讨论】:

  • 谢谢。我看了一些其他的宝石,但只是感到困惑;这些例子更清楚一些。所以如果我理解正确,我需要做class_eval do ;end,并用它来为类添加方法。我现在将进一步研究该方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多