【问题标题】:Rails has_one with class name and foreign key带有类名和外键的 Rails has_one
【发布时间】:2012-05-19 11:13:14
【问题描述】:

我有一个 Rails 模型,我使用两个 has_one 关系:requesterfriend。在我使用的控制台中时:

f = FriendRequest.all
f[0].requester

我得到ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.requester_id: SELECT "users".* FROM "users" WHERE "users"."requester_id" = 4 LIMIT 1 .

我真的不知道如何使用类名和指定记录的键来指定“has_one”关系。这是我的模型:

class FriendRequest < ActiveRecord::Base
  has_one :requester, :class_name => "User", :foreign_key => "requester_id"
  has_one :friend, :class_name => "User", :foreign_key => "friend_id"
end

我该怎么做?在belongs_to 关系中,我使用相同的关系,显然将has_one 替换为belongs_to。谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord foreign-keys


    【解决方案1】:
    has_one :requester, :class_name => "User", :foreign_key => "requester_id"
    

    这一行(来自您发布的代码)表明requesterUser,表users 应该包含一个列requester_id,它是指向friend_requests 记录的外键。 rails 错误消息指出requester_id 列不存在(您必须通过migration 创建它)。

    在这种情况下,使用

    rails generate migration AddRequesterIdToUsers requester_id:integer
    

    它将生成迁移:

    class AddRequesterIdToUsers < ActiveRecord::Migration
      def change
        add_column :users, :requester_id, :integer
      end
    end  
    

    然后使用rake db:migrate 运行它们迁移。

    查看Rails Relation Guide,了解有关has_onebelongs_to 之间差异以及如何使用它们的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      相关资源
      最近更新 更多