我需要将一个不存在的表映射到ActiveRecord(在我的例子中:Wordpress数据库模式),它包含一个自定义SQL语句,如下所述。我希望能够在其他语句中使用find(),first(),all()。有没有办法在不实际覆盖所有finder方法的情况下实现这一目标? (我目前正在重新定义这些方法,以实现类似的结果,但是很想知道是否有更多的ActiveRecord / Rails方法可以这样做)
目前我正在做的例子
class Category < ActiveRecord::Base
self.table_name="wp_terms"
def self.all
Category.find_by_sql("select distinct(wp_terms.term_id),wp_terms.name,wp_term_taxonomy.description,wp_term_taxonomy.parent,wp_term_taxonomy.count from wp_terms inner join wp_term_relationships ON wp_term_relationships.object_id = wp_terms.term_id INNER JOIN wp_term_taxonomy ON wp_term_taxonomy.term_id = wp_terms.term_id where taxonomy = 'category';")
end
end
感谢任何指示。
答案 0 :(得分:1)
您可以使用default scope:
class Category < ActiveRecord::Base
self.table_name="wp_terms"
# Individual scopes for readability - the names could be improved.
scope :select_scope, select("DISTINCT(wp_terms.term_id), wp_terms.name, wp_term_taxonomy.description, wp_term_taxonomy.parent, wp_term_taxonomy.count")
scope :join_scope, joins("INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = wp_terms.term_id INNER JOIN wp_term_taxonomy ON wp_term_taxonomy.term_id = wp_terms.term_id")
scope :where_scope, where("taxonomy = 'category'")
default_scope select_scope.join_scope.where_scope
end
然后你应该可以在Category
上调用任何finder方法而无需亲自实现。
答案 1 :(得分:0)
您是否会考虑按Enterprise Rails?
中所述创建视图支持的模型