Ruby on rails Rails:一对多外键不正确

Ruby on rails Rails:一对多外键不正确,ruby-on-rails,foreign-keys,one-to-many,shoulda,Ruby On Rails,Foreign Keys,One To Many,Shoulda,我对rails比较陌生。我正在尝试在rails中设置一对多关联。然而,我认为我的外键出了问题,因为我的测试失败了。我的测试如下: 在用户规范中: it {should have_many :invitations} 用户模型: has_many :invitations 邀请模式: belongs_to :sender, :class_name => "User" 邀请迁移: class CreateInvitations < ActiveRecord::Migrati

我对rails比较陌生。我正在尝试在rails中设置一对多关联。然而,我认为我的外键出了问题,因为我的测试失败了。我的测试如下:

在用户规范中:

  it {should have_many :invitations}
用户模型:

  has_many :invitations
邀请模式:

belongs_to :sender, :class_name => "User"
邀请迁移:

class CreateInvitations < ActiveRecord::Migration
  def change
    create_table :invitations do |t|
      t.integer :sender_id
      t.string :token

      t.timestamps
    end
  end
end

我不确定我会错在哪里。有什么想法吗?

Fivell是对的。您刚刚使用了一个别名来关联用户类。将列名更改为
user\u id
,或者告诉rails使用另一个外键:

邀请函

user.rb


错误表明问题不在“所属”,而在“有很多”

 has_many :invitations , :foreign_key => "sender_id"

t、 integer:sender\u id在migrationok中更改为t.integer:user\u id是有意义的。我从一个railcast得到了这部分迁移。如果我想在迁移过程中保留:sender\u id(如果我也带了recipient\u id…我该如何调整我的代码?使用
:foreign\u key
。请参阅我的答案。这也带来了相同的错误。我添加了:foreign\u key=>“sender\u id”…这没有什么区别。我不希望这会修复错误,因为按照惯例rails会生成foreign\u key={协会名称}_id你重新启动服务器/控制台了吗?正如你所看到的,rails在你的问题中寻找
用户id
。它使用的是真实的关联名,而不是别名。谢谢,忽略了这个。我修正了我的答案。这修正了它!可能是rails的初学者问题,但是你能解释一下为什么我必须在输入邀请键时添加这个吗是否已经知道发件人的外键是发件人id?否,您可以将其从
邀请.rb
中删除。您只需声明一次,但声明位置正确。您可以告诉rails使用外键“发件人id”将用户与多个邀请关联“。这是正确的方法。克伦普,你知道为什么会这样吗?为什么导游让外键似乎可以放在协会的任何一方?对我来说,这似乎是导游中的一个错误。”。
belongs_to :sender, :class_name => "User"
has_many :invitations, :foreign_key => "sender_id"
 has_many :invitations , :foreign_key => "sender_id"