是否可以指定不应在ActiveRecord中加载的列?

时间:2010-01-11 16:58:58

标签: ruby-on-rails oracle

我有一个与另一个应用程序共享的数据库表。它有许多我永远不会在我的应用程序中使用的列。是否可以在ActiveRecord模型中指定要忽略的列?

通常情况下这不是太大的交易,但在这种情况下,我有一个包含两个blob的表,我永远不需要与另一个有37列的表(我需要一个)连接。

我想我总能在我的查找和关联中使用:select属性,但我想只配置一次。

3 个答案:

答案 0 :(得分:3)

我认为您应该能够为您的模型指定default_scope,并传递:select来指定您感兴趣的列。

class MyModel < ActiveRecord::Base
  default_scope :select => 'column1, column2, column3'
end

答案 1 :(得分:1)

你可以和named_scope

一起破解它
  named_scope :without, lambda {|arg| {:select =>Post.column_names.reject {|c| [arg].flatten.include? c.to_sym}.join(",")} }

>> Post.column_names
=> ["id", "title", "body", "test1", "test2", "created_at", "updated_at"]
>> Post.without(:test1)
  Post Load (0.4ms)   SELECT id,title,body,test2,created_at,updated_at FROM "posts" 
=> [#<Post id: 1, title: "test post", body: "something something", test2: "test2 thing", created_at: "2010-01-11 17:11:41", updated_at: "2010-01-11 17:11:41">]
>> Post.without([:test1,:body])
  Post Load (0.3ms)   SELECT id,title,test2,created_at,updated_at FROM "posts" 
=> [#<Post id: 1, title: "test post", test2: "test2 thing", created_at: "2010-01-11 17:11:41", updated_at: "2010-01-11 17:11:41">]

答案 2 :(得分:0)

您可以在数据库中使用视图,而不是直接查看源表。这样做的好处是,如果他们添加另一个BLOB列,而不是在视图中,则不必更改代码(除非您更改视图),因此不会被拾取。