我有以下型号......
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)房间是否“不知道”布局。我可以不使用这样的其他型号吗?我怎么能这样做。
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种内置方法定义。但是,它是否会对第一个产品造成任何性能损失,还是不太理想?
编辑:回答下面的前两条评论......
当我输入Layout或ap Layout时,我得到了我的整个布局模型。
class Layout < ActiveRecord::Base {
:id => :integer,
:description => :string,
:occupancy_count => :integer,
:created_at => :datetime,
:updated_at => :datetime
}
=> nil
通过irb,是的,我的意思是rails console。这里的完整布局模型......
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
答案 0 :(得分:0)
1)您似乎没有声明Layout类。
belongs_to
类方法expects要定义的相应ActiveRecord类。默认情况下,它应与方法名称匹配(:layout
对应于Layout
)。