如何更改find方法的activerecord模型默认行为? 例如,我想搜索drupal nodes数据库中的所有书籍,但是drupal只对所有数据使用一个表,并使用'type'列来查找类型
class Book < ActiveRecord::Base
set_table_name 'node'
def find(*args)
:conditions => {:type => 'book'}
super
end
end
这是解决这个问题的正确方法吗?
答案 0 :(得分:1)
我已经解决了这个问题,为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
它有效,但看起来不像做东西的轨道方式。如果我很快就会有时间,我将尝试编写一个库来使用诸如acts_as_drupal_node
之类的东西来访问drupal数据现在我可以使用以下方式获取所有图书条目:
@books = Node.book.all