【发布时间】:2014-04-28 18:30:49
【问题描述】:
我有以下型号...
class Room < ActiveRecord::Base
belongs_to :hotel
belongs_to :layout
has_many :visits
validates :number, presence: true
validates :rate, presence: true
validates :smoking, presence: true
def self.rooms_with_smoking(smoking)
self.where('smoking = ?', smoking)
end
def self.occupied_rooms(from_date, to_date) #24-26
self.joins(:visits).where('date >= ? and date <= ?', from_date, to_date).uniq
end
def self.vacant_rooms(from_date, to_date)
self.where.not(id: Room.occupied_rooms(from_date, to_date))
end
def self.blahblah(occupancy_count, smoking, from_date, to_date)
layouts = Layout.layouts_with_occupancy_count_gt(occupancy_count)
Room.rooms_with_smoking(smoking).vacant_rooms(from_date, to_date).joins(layouts)
end
end
blahblah 方法...
当我尝试从 irb 运行它时,我收到一个错误...“未知类:布局”
1) Room 不“知道”布局。我不能像这样使用另一个模型吗?我该怎么做。
2) 理论问题:是有一个大的方法定义来获取一些信息更好......还是有很多小的划分方法,并在一个方法中使用它们来获得更大的一块数据。比如……
一个“大”方法:
def self.find_rooms_with(occupancy_count, smoking, from_date, to_date)
Room.vacant_rooms(from_date, to_date).joins(:layout).where('occupancy_count >= ?', occupancy_count).where('smoking = ?', smoking)
end
绝不是大,但一切都重新编码。看起来它不会跟随 DRY 太久。
许多小方法:
def self.blahblah(occupancy_count, smoking, from_date, to_date)
layouts = Layout.layouts_with_occupancy_count_gt(occupancy_count)
Room.rooms_with_smoking(smoking).vacant_rooms(from_date, to_date).joins(layouts)
end
第二个更容易编码。它利用 3 个内置方法定义。但是,它对第一个性能有什么影响,还是不太理想?
编辑:回答下面的前两个 cmets...
当我只输入 Layout 或 ap Layout 时,我会得到整个 Layout 模型。
class Layout < ActiveRecord::Base {
:id => :integer,
:description => :string,
:occupancy_count => :integer,
:created_at => :datetime,
:updated_at => :datetime
}
=> nil
irb,是的,我的意思是 Rails 控制台。完整的布局模型在这里...
class Layout < ActiveRecord::Base
has_many :rooms
validates :description, presence: true
validates :occupancy_count, presence: true
def self.layouts_with_occupancy_count(occupancy_count)
self.where('occupancy_count = ?', occupancy_count)
end
def self.layouts_with_occupancy_count_gt(occupancy_count)
self.where('occupancy_count >= ?', occupancy_count)
end
end
【问题讨论】:
-
您有 Layout 模型吗?当您说
irb时,您的意思是rails console? -
是的,当您进入 Rails 控制台并输入
Layout时会发生什么 -
在上面的原始帖子中添加了这些问题的答案。
-
我也有同样的问题。一件奇怪的事情是生产看到我创建的类,但在开发中我得到没有类定义的错误。
标签: ruby-on-rails activerecord dry