我有以下型号...
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
巴拉巴拉的方法...
当我尝试从 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 个内置方法定义。然而,与第一个相比,它是否有任何性能影响,或者是否不太理想?
EDIT: 回答下面的前两条评论...
当我只输入 Layout 或 ap 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