2011-04-22 42 views
0

我很新的軌道(和紅寶石),我碰到了似乎是一個簡單的問題,但我一直無法弄清楚我在做什麼錯誤。在下面的代碼示例中,我已經設置了Project,Attribute和User模型及其關聯。此外,我已經包含了遷移代碼,以防我的問題出現在那裏。Rails AssociationTypeMismatch錯誤我找不出

看起來很簡單,但是當我做在軌控制檯以下:

proj = Project.create(:name => 'first project', :link => 'http://www.me.com', :ownerid => 1, :desc => 'First project description', :active => true) 

我得到這個錯誤:

ActiveRecord::AssociationTypeMismatch: Attribute(#2162685940) expected, got Array(#2151973780) 

那麼它是什麼,我做錯了嗎?我得到的軌道認爲它應該得到一個屬性,而是得到一個數組,但我不明白爲什麼。我可以成功創建一個屬性或用戶,當我從項目模型中刪除'has_many:attributes'時,我可以成功創建一個項目。

class Project < ActiveRecord::Base 
    has_many :users 
    has_many :attributes 
end 

class Attribute < ActiveRecord::Base 
    belongs_to :project 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :project 
end 

class CreateProjects < ActiveRecord::Migration 
    def self.up 
    create_table :projects do |t| 
     t.string :name 
     t.string :link 
     t.integer :owner #user_id# 
     t.text :desc 
     t.boolean :active 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :projects 
    end 
end 

class CreateAttributes < ActiveRecord::Migration 
    def self.up 
    create_table :attributes do |t| 
     t.string :name 
     t.integer :project_id 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :attributes 
    end 
end 

class CreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table :users do |t| 
     t.string :email 
     t.string :password 
     t.boolean :active 
     t.boolean :admin 
     t.string :location 
     t.string :phone 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :users 
    end 
end 

回答

2

Attribute是保留字,所以您應該重命名您的模型。其實保留的是attributes=方法。所以,當你創建關聯has_many :attributes你改寫非標準方法

這裏是API:attributes=attributes

+1

+1:好去處。 – 2011-04-22 19:51:47

+0

Doh!這就是我爲了學習新東西而得到的結果! :-) 謝謝您的幫助。 – randall 2011-04-25 16:58:10