2

存在しないテーブルを、以下で説明するカスタム SQL ステートメントで構成される ActiveRecord (私の場合は Wordpress データベース スキーマ) にマップする必要があります。他のステートメントの中でも find()、first()、all() を使用できるようにしたいと考えています。実際にすべてのファインダーメソッドを上書きせずにこれを達成する方法はありますか? (私は現在、同様の結果を達成するためにこれらのメソッドを再定義していますが、そうするための 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

ポインタをありがとう。

4

2 に答える 2

1

デフォルトのスコープを使用できます:

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次に、自分で実装しなくても、任意のファインダー メソッドを呼び出すことができるはずです。

于 2012-10-17T04:07:04.520 に答える
0

Enterprise Railsで概説されているように、ビューに基づくモデルを作成することを検討しますか?

于 2012-10-11T20:17:46.197 に答える