如何使用 has_one 关联连接关联表

2024-01-03

在我的 Rails 应用程序中,我只要求用户在注册时输入电子邮件和姓名,然后让他们可以选择为其个人资料提供更完整的联系方式。因此,我有一个与 Contact.rb 关联的 User.rb 模型,即

User.rb

 has_one :contact

联系方式.rb

 belongs_to :user

Contact.rb 具有您可能期望的可预测字段,例如地址、邮政编码等,但它还存储与 Province.rb 模型关系的province_id,因此

联系方式.rb

 attr_accessible :address, :city, :mobile,  :postalcode, :province_id, :user_id
 belongs_to :user
 belongs_to :province

省份.rb

has_many :contacts

我就是这样做的(而不是将省份名称存储为 contact.rb 上的“字符串”),以便我可以更轻松地(所以我认为)按省份对用户进行分类。

在 Artist_controller 之一的显示操作中,我执行以下操作来检查用户是否尝试按省排序,然后调用 Artist_by_province 方法进行搜索

    if params[:province_id]
     province = params[:province_id]
     province = province.to_i #convert string to integer

     @artistsbyprovince = User.artists_by_province(province)

     else

     @artists = User.where(:sculptor => true)

     end

这是 User.rb 模型上的方法,如果传入省份 ID,它会调用该方法

scope :artists_by_province, lambda {|province|
  joins(:contact).
  where( contact: {province_id: province},
         users: {sculptor: true})

  }

但是它给了我这个错误:

Could not find table 'contact'

如果我用复数形式联系

scope :artists_by_province, lambda {|province|
  joins(:contacts).
  where( contacts: {province_id: province},
         users: {sculptor: true})

  }

这个错误

Association named 'contacts' was not found; perhaps you misspelled it?

谁能告诉我当我进行此查询时我做错了什么?

更新:我在发布后更改了一些细节,因为我的复制和粘贴有一些问题

附:忽略我正在寻找“雕塑家”的事实。我更改了问题的用户类型的名称。

来自 schema.rb

create_table "contacts", :force => true do |t|
    t.string   "firm"
    t.string   "address"
    t.string   "city"
    t.string   "postalcode"
    t.string   "mobile"
    t.string   "office"
    t.integer  "user_id"
    t.datetime "created_at",  :null => false
    t.datetime "updated_at",  :null => false
    t.integer  "province_id"
  end

该问题已通过使用解决contact(单数)在连接和contacts(复数)在 where 子句中。我猜测“contact”(单数)反映了 User.rb 和 Contact.rb 之间的 has_one 关联,而“contacts”在 where 子句中用于表示表的名称,该名称始终为复数。

User.rb

  has_one :contact

  scope :artists_by_province, lambda {|province|
  joins(:contact).
  where( contacts: {province_id: province},
         users: {sculptor: true})

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

如何使用 has_one 关联连接关联表 的相关文章

随机推荐

  • 过时的 Kotlin 运行时

    当我想更新 kotlin 运行时时收到此消息 kotlin stdlib 1 1 2 4 库中的 Kotlin 运行时版本是 1 1 2 4 而插件版本是 1 1 3 release Studio 3 0 2 应更新运行时库以避免兼容性问题
  • 在 matplotlib 中将图形尺寸设置为大于屏幕尺寸

    我正在尝试创建数字matplotlib这在期刊文章中读起来很好 我有一些较大的图形 带有子图形 我想在纵向模式下占据几乎整个页面 具体来说 6 5 x9 对于美国信纸上具有 1 边距的整页图形 我可以设置轻松调整图形尺寸figsize范围
  • R 中可以有多行注释吗? [复制]

    这个问题在这里已经有答案了 我找到了这个旧线程 http r 789695 n4 nabble com How to comment in R tt882882 html none 一年多前 这解释了为什么 R 不支持多行注释 例如 PHP
  • Entity Framework 4 加载并包含组合

    如果我有 3 张表 表1 表2 表3 并且Table3有一个针对Table2的FK 而Table2也有一个针对Table1的FK 然后我像这样加载我的对象 using Entities entities new Entities Table
  • 如何在 Safari 中使用 AJAX 调用之前的 WebShareAPI?

    当用户单击我们的付费网站上的共享按钮时 我们会通过异步调用生成一个令牌 该令牌允许人们单击共享链接绕过付费墙 我添加了对 Web Share API 的支持 在触发之前首先调用令牌navigator share 沿着这些思路 fetchCa
  • 如何从 Z 缓冲区获取 Z 值

    我在 OpenGL 中绘图时遇到问题 我需要准确查看深度缓冲区中放置的值 谁能告诉我如何检索这些值 谢谢 克里斯 Use glReadPixels http www opengl org sdk docs man xhtml glReadP
  • C# 建立从笔记本电脑内部蓝牙 4.0 到蓝牙低功耗 (BLE) 外设的流

    我正在尝试编写一个连接到蓝牙低功耗设备 BLE 的程序 然后在更新时或在给定的时间间隔读取特征 我的外设是 Texas Instruments CC2540 BLE 设备 我的出发点是查看 TI 的示例程序 它有一个心率监视器 http p
  • 我可以在 El Capitan 上安装 Xcode 8.3

    我可以在不更新 Mac 操作系统的情况下安装 xcode 8 3 即 OS X El Capitan 版本 10 11 6 我在苹果网站上找不到任何参考资料 但是 这个link https stackoverflow com a 10335
  • 使用 PdfDocument 在 Android 中生成自定义尺寸的 PDF

    Pdf文档 https developer android com reference android graphics pdf PdfDocument是一个可以从 Android 视图生成 PDF 的类 您只需添加一个视图即可PdfDoc
  • 如何将复选框标记为已签入角度4

    我对 Angular 2 很陌生 我需要在单击按钮时标记复选框 我在循环中有一些复选框 例如 tr td td tr
  • 节点在异步函数完成之前退出

    我有一个返回承诺的函数 我试图在异步函数中等待它 问题是程序立即完成 而不是等待承诺 异步测试 js function doItSlow const deferred new Promise setTimeout gt console lo
  • 最好将项目添加到集合中,或将最终列表转换为集合?

    我有一些数据看起来像这样 ID1 ID2 ID3 ID1 ID4 ID5 ID3 ID5 ID7 ID6 其中每一行都是一个组 我的目标是为每个 ID 建立一个字典 然后是与其共享 gt 1 个组的一组其他 ID 例如 此数据将返回 ID1
  • 检测复制或相似的文本块

    我有很多关于 Markdown 格式编程的文本 有一个构建过程能够将这些文本转换为 Word HTML 并执行简单的验证规则 例如拼写检查或检查文档是否具有所需的标题结构 我想扩展该构建代码以检查所有文本中的复制粘贴或类似块 是否有任何现有
  • 字符编码问题

    我需要将其保存到数据库 mysql 中并将其显示出来 我的数据库是utf8 general ci 我 i visib i i 我 s i s xyg 我 ivi g i w d y d z 我 w ys z 我很忙 bu v ig y 我
  • Android Gradle DexException:多个 dex 文件定义 Lorg/hamcrest/Description

    com android dex DexException 多个 dex 文件定义 Lorg hamcrest Description 尝试通过以下方式进行调试构建 测试时发生安卓工作室 or via Gradle我的应用程序上的命令行 发布
  • HTML5 视频色差 Chrome 和 Internet Explorer

    我正在使用 HTML5 视频标签通过以下代码在我的网站上播放短视频
  • 找不到值类型为 Boolean 的属性“app:vm”的 GETTER

    我正在尝试在我的自定义控件中使用本机 2 路 Android 数据绑定 所以我在 xml 中有类似的东西
  • Chrome刷新右键重新加载选项不可用

    我正在尝试做一个hard reload and empty cache在 Chrome 中 因为之前加载的网站不断出现在localhost我正在使用的端口 问题是右键单击选项似乎已停止工作 即 当我右键单击刷新按钮时没有任何反应 只能单击左
  • 为什么模板可以直接使用$this关键字?

    我是 PHP 的新手 今天我在 Magento 中看到一些代码如下top phtml div class nav container ul li class home a href a li ul div
  • 如何使用 has_one 关联连接关联表

    在我的 Rails 应用程序中 我只要求用户在注册时输入电子邮件和姓名 然后让他们可以选择为其个人资料提供更完整的联系方式 因此 我有一个与 Contact rb 关联的 User rb 模型 即 User rb has one conta