Rails:从另一个模型调用一个模型。为什么这是不可能的?

2023-12-01

我有以下型号...

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

1)看来你没有声明Layout类。

The belongs_to类方法expects要定义相应的 ActiveRecord 类。默认情况下它应该与方法名称匹配(:layout对应于Layout).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails:从另一个模型调用一个模型。为什么这是不可能的? 的相关文章

随机推荐

  • 使用 HttpClient 3.1 设置响应编码

    我在用着org apache commons httpclient HttpClient并需要设置响应编码 由于某种原因 服务器在 Content Type 中返回不正确的编码 我的方法是获取原始字节的响应并转换为String与所需的编码
  • xinetd 服务调用 python 脚本(无法正确执行)

    我读到了这个 您可以使用 xinetd 添加启动 python 脚本的服务 标准输入和输出将通过网络在所需端口上传输 因此您不需要修改脚本 input raw input 和 print 方法可以正常工作 因此 当建立到 192 168 2
  • 是否有针对所有属性的 Object.watch / __noSuchMethod__ 的垫片可用?

    我想延长localStorage通过每次获取 存储设置时执行一些代码 我可以为所有现有属性定义一个 getter setterlocalStorage 但问题出在新的设置上 例如 localStorage somenewsetting 12
  • powershell变量内联扩展作为cmdlet参数?

    调用 cmdlet 时 是否可以以某种方式扩展 powershell 变量的值 以便它充当 cmdlet 的参数 具有关联值 这是我正在尝试的示例 CREDENTIALED SECTION Username USER NAME Passwo
  • 单个字段中可以有多个外键吗?

    我想知道是否有一种方法可以在 MySQL 数据库的单个字段中包含多个值 其中每个值都是引用另一个表的外键 我正在设计一个包含产品表和产品认证表的数据库 我正在使用 InnoDB 和外键约束 产品 表包含有关产品特定实例的详细信息 产品表中包
  • CHM 中的 SVG 图形(Html 帮助研讨会)

    我正在尝试在 CHM 文件中使用 SVG 图形 CHM 由 HTML Help Workshop 创建 不幸的是 svg 文件没有显示在我编译的 chm 中 在 Html 中一切正常 我已经将 SVG 添加到了 hhp 的文件部分 但还是什
  • 将 django-oscarapi API ROOT 扩展到自定义 API 类

    我有一个 django oscar 应用程序 我使用 django oscarapi 作为我的自定义 API oscarapi 中缺少一些东西 例如类别和促销 但我已经能够使用 django restframework 来创建类别 API
  • Javascript源代码分析(特别是重复检查)

    部分重复this 笔记 我已经通过我编写的工具广泛使用 JSLint 该工具会定期扫描当前项目目录以查找最近更新 创建的 js 文件 它极大地提高了我的工作效率 而且我怀疑是否有任何东西的价格能与 JSLint 一样好 它是免费的 也就是说
  • lxml/requests 可以选择下拉选项然后解析生成的ajax吗?

    我有一个正在尝试测试的网站 虽然我可以在下拉列表中获取选项列表 但我不确定如何选择它 没有提交按钮 所以如果我选择它 它将加载下面的 ajax 表 我只是不确定 lxml requests 是否可以做到这一点或如何做到这一点 如果有人可以确
  • android服务的优先级如何设置?

    有没有办法设置android服务的优先级 我想在销毁应用程序的主要活动后在后台运行该服务 所以我从我的服务中返回 START REDELIVERY INTENT 但重新启动服务需要一些时间 大约 1 3 分钟 我想立即重新启动服务 有没有办
  • 从 ASP 启动/停止服务。网页

    我实现了一个网页 ASP NET VB 来启动 停止 Windows 服务 我使用了拟人化 如下所述 http support microsoft com kb 306158 当页面读取服务状态时一切正常 domain Me TextBox
  • Curl 错误:无法解析主机:www.localhost

    我收到无法解决的错误host www localhost 我不知道它为什么会来 url http www localhost 81 dbWIP selectApi php name name client curl init echo cl
  • 使用 rake db:create 创建 Rails DB 时出错

    我正在尝试使用 Rails 来实现我的第一个 hello world rails 示例入门指南在我的 OSX 10 6 3 机器上 当我去执行第一个时rake db create命令 我正在使用 mysql 我得到 simon Users
  • 切换选项卡后 WPF ComboBox 选择发生变化

    我做了一个基于嵌套选项卡的项目 嵌套选项卡是同一 viemModel 和同一 UI 的不同实例 当我在选项卡之间切换时 选项卡中存在的组合框会根据失去焦点的选项卡进行选择 我添加了测试项目的视图模型和视图 预先感谢您的帮助 主窗口
  • Hikari 池禁用调试模式

    大家好 我必须禁用日志信息com zaxxer hikari pool HikariPool 我尝试过 Logger getLogger com zaxxer hikari pool HikariPool setLevel Level OF
  • MS Word 宏 - 删除段落

    有人可以帮我使用 MS Word 宏吗 它可以在整个文档的每个段落中搜索特定符号 并删除不包含该符号的段落 我对 VBA 几乎一无所知 但刚刚收到一份巨大且笨重的文档 我需要快速编辑 这是一个快速宏 应该可以完成您想要的操作 谨慎使用 并且
  • 编辑框提示 - 始终显示提示

    我有一个带有提示的文本框 但我希望始终显示提示 即使 TB 中有输入也是如此 示例是 Gmail 应用程序中的 收件人 字段 您可以使用 3 种方法 剧透 使用数字 3 因为正如我的评论中提到的 在 Gmail 示例中 它不是实际的提示 在
  • Observable Angular2

    我的 Angular2 应用程序中有对象数组 当新对象到达时 我使用 SignalR 填充数组 现在的重点是当新对象到达时我遇到了错误 无法读取未定义的属性 我认为这可能是错误的 因为它的工作是异步的 并且在 html 中我曾经在对象内部获
  • WIF - FederatedSignOut 未将用户注销所有站点

    我正在使用 Windows 身份基础 对于一些 MVC 2 0 站点 我在将某人从所有受 WIF 保护的网站中注销时遇到了真正的问题 看起来我的注销只是将当前站点上的人员注销 这是我的代码 public void FederatedSign
  • Rails:从另一个模型调用一个模型。为什么这是不可能的?

    我有以下型号 class Room lt ActiveRecord Base belongs to hotel belongs to layout has many visits validates number presence true