我正在使用 Ruby on Rails 3.2.2 和 Squeel gem。我有以下陈述,我正在尝试重构Mixin 模块my_squeel_query
中的方法(因为它被我的许多模型使用):
# Note: 'article_comment_associations' and 'model_as_like_article_comment_associations'
# refer to database table names.
class Article < ActiveRecord::Base
def my_squeel_query
commenters.
.where{
article_comment_associations.article_id.eq(my{self.id}) & ...
}
end
end
class ModelAsLikeArticle < ActiveRecord::Base
def my_squeel_query
commenters.
.where{
model_as_like_article_comment_associations.article_id.eq(my{self.id}) & ...
}
end
end
我的问题是我无法通过在 Mixin 模块中生成动态名称来重构article_comment_associations
和声明。model_as_like_article_comment_associations
也就是说,如果那是String
我可以通过使用"#{self.class.to_s.singularize}_comment_associations"
如下内容动态生成相关名称:
class Article < ActiveRecord::Base
include MyModule
end
class ModelAsLikeArticle < ActiveRecord::Base
include MyModule
end
module MyModule
def my_squeel_query
commenters.
.where{
# Note: This code doesn't work. It is just an sample.
"#{self.class.to_s.singularize}_comment_associations".article_id.eq(my{self.id}) & ...
}
end
end
但是,由于这不是我的情况,我不能“建立”名称并使其my_squeel_query
在模型之间“共享”。
如何动态生成与 Squeel gem 相关的关联名称?我应该考虑以另一种方式重构吗?你有什么建议?