gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中创建具有外键别名的固定装置?

转载 作者:行者123 更新时间:2023-12-05 05:26:23 24 4
gpt4 key购买 nike

我有两个模型,AppUser,其中 App 的创建者是 User .

# app.rb
class App < ActiveRecord::Base
belongs_to :creator, class_name: 'User'
end

# user.rb
class User < ActiveRecord::Base
has_many :apps, foreign_key: "creator_id"
end

我如何为此创建固定装置?

我试过:

# apps.yml
myapp:
name: MyApp
creator: admin (User)

# users.yml
admin:
name: admin

但这行不通,因为关系是别名外键,而不是多态类型。在 creator 行中省略 (User) 也不起作用。

我看过几个关于外键和固定装置的帖子,但没有一个真正对此做出回应。 (许多人建议使用 factory_girl 或 machinist 或其他一些固定装置的替代品,但后来我在其他地方看到他们有类似或其他问题)。

最佳答案

从您的 apps.yml 中删除 (User)。我用 Users 和 App 复制了一个基本的应用程序,但我无法重现您的问题。我怀疑这可能是由于您的数据库模式。检查您的架构并确保您的应用程序表中有一个“creator_id”列。这是我的架构。

ActiveRecord::Schema.define(version: 20141029172139) do
create_table "apps", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.integer "creator_id"
t.string "name"
end

add_index "apps", ["creator_id"], name: "index_apps_on_creator_id"

create_table "users", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
end
end

如果不是您的 schema.rb 那么我怀疑这可能是您尝试访问它们的方式。我编写的一个能够访问关联的示例测试(请参阅终端中的输出):

require 'test_helper'

class UserTest < ActiveSupport::TestCase
test "the truth" do
puts users(:admin).name
puts apps(:myapp).creator.name
end
end

我的两个模型长什么样:

用户.rb

class User < ActiveRecord::Base
has_many :apps, foreign_key: "creator_id"
end

应用.rb

class App < ActiveRecord::Base
belongs_to :creator, class_name: 'User'
end

我的 YML 文件:

用户.yml:

admin:
name: Andrew

应用程序.yml

myapp:
name: MyApp
creator: admin

关于ruby-on-rails - 如何在 Rails 中创建具有外键别名的固定装置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26635832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com