2014-10-29 53 views
1

我有兩個模型,AppUser,其中App的創建者是User如何用rails中的外鍵別名創建燈具?

# 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 

但是,這並不工作,因爲關係是一個別名外鍵,而不是多態類型。在創建者行中省略(User)也不起作用。

我已經看到關於外鍵和燈具的幾個線程,但沒有一個真的對此做出響應。 (許多人建議使用factory_girl或機械師或其他替代裝置,但是我在其他地方看到他們有類似或其他問題)。

回答

2

從您的apps.yml中刪除(用戶)。我用用戶和應用程序複製了一個基本的應用程序,我無法重現您的問題。我懷疑這可能是由於你的數據庫模式。檢查你的模式,並確保你的應用程序表上有一個'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 

我的兩個模型是什麼樣的:

user.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文件:

users.yml裏:

admin: 
    name: Andrew 

apps.yml

myapp: 
    name: MyApp 
    creator: admin 
+0

謝謝,@安德魯罪人!我意識到我沒有爲測試環境調用燈具負載。我現在稱之爲'rake db:fixtures:load RAILS_ENV = test',然後調用'rails c test',然後在刪除'(User)'後綴後它工作正常。 – Anand 2014-10-29 17:50:08

相關問題