Ruby on Rails - ActiveRecord关联问题:查询不正确(单数与复数?)

时间:2018-02-20 21:22:59

标签: ruby-on-rails ruby activerecord associations

第一篇文章我曾经觉得我必须在这里做,通常我的问题只能通过阅读其他帖子来回答,但这次我觉得我太深了,找不到合适的答案,我&#39已经找了好一阵子。我的代码可能会遇到多个问题。

我是RoR的新手,过去几个月刚刚开始使用它。我试图运行测试查询以确保我的关联正常工作,并根据我得到的错误,我觉得我搞砸了一些简单的事情。我为webapp设置了几个表,我现在关注2个表,因为之后可以在其他地方应用此方法。

相关信息:

-I' m使用Devise进行用户身份验证

- 我有一个pto_requests_controller.rb和registrations_controller.rb(注册用作设计用户控制器)

- 在数据库中,表名是'用户'和' pto_requests'

我有一个pto_request模型(文件名为' pto_request.rb'):

class PtoRequest < ApplicationRecord
  belongs_to :user, optional: true
end

用户模型(文件名为&#39; user.rb&#39;):

class User < ApplicationRecord
  has_many :pto_requests
end

要在数据库中创建关联,我使用了此迁移:

class AddUsersToPtorequests < ActiveRecord::Migration[5.1]
  def change
    add_reference :pto_requests, :users, foreign_key: true
  end
end

外键是在&#39; pto_requests&#39;中创建的。表格和称为&#39; users_id&#39;

我可以单独查询表而没有任何问题,但是一旦我尝试通过pto_requests访问数据,例如user.fname,就会出错。作为一个示例查询,我尝试过:

<%= PtoRequest.joins(:user)
.select('user.fname as user_name').first.user_name%>

我收到以下错误:

  

Mysql2 ::错误:未知列&#39; user.fname&#39;在&#39;字段列表&#39;:SELECT user.fname&gt; as user_name FROM pto_requests INNER JOIN users ON usersid =&gt; {{1 } {。{1}} ORDER BY pto_requestsuser_id ASC LIMIT 1

我目前的理论是,它与生成的SQL语法的最后一个问题有关,因为它正在寻找&#39; user_id&#39;但这不存在,只有&#39; users_id&#39;确实。非常感谢任何帮助,如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

你完全没有理解这些联想。

belongs_to创建一对一或一对多关联,并将外键列放在此模型表上:

class PtoRequest < ApplicationRecord
  belongs_to :user, optional: true
end

因此,该关联将引用pto_requests.user_id。您已将外键添加到错误的表中。

要生成正确的迁移运行:

rails g migration add_user_to_pto_requests user:references

你引用的恩赐应该是单数。