Создание модели AR для базы данных Drupal - PullRequest
0 голосов
/ 30 июня 2010

как изменить поведение модели activerecord по умолчанию для метода find? Например, я хочу найти все книги в базе данных узлов drupal, но drupal использует только одну таблицу для всех данных и использует столбец «type» для определения типа

class Book < ActiveRecord::Base
  set_table_name 'node'

  def find(*args)
    :conditions => {:type => 'book'}
    super
  end
end

это правильный подход к решению этой проблемы?

1 Ответ

1 голос
/ 05 июля 2010

Я решил это, создав модель для Node и используя named_scopes

, в результате получилось следующее:

class Node
  set_table_name 'node'
  set_primary_key 'nid'
  named_scope :book, :conditions => {:type => 'book'}

  # if i don't overwrite this method, i would get an error when i try to use the type column
  def self.inheritance_column
    "rails_type"
  end
end

это работает, но не похоже на рельсовый способ работы,Если я скоро получу достаточно времени, я попытаюсь написать библиотеку для доступа к данным drupal, используя что-то вроде activ_as_drupal_node

, теперь я могу получить все записи в книгах, используя:

@books = Node.book.all
...