第一篇文章我曾经觉得我必须在这里做,通常我的问题只能通过阅读其他帖子来回答,但这次我觉得我太深了,找不到合适的答案,我&#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 JOINusers
ONusers
。id
=&gt; {{1 } {。{1}} ORDER BYpto_requests
。user_id
ASC LIMIT 1
我目前的理论是,它与生成的SQL语法的最后一个问题有关,因为它正在寻找&#39; user_id&#39;但这不存在,只有&#39; users_id&#39;确实。非常感谢任何帮助,如果需要更多信息,请告诉我。
答案 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
你引用的恩赐应该是单数。