Я довольно новичок в rails (и ruby), и я столкнулся с тем, что кажется простой проблемой, но я не смог понять, что я делаю неправильно. В приведенных ниже примерах кода я настроил модели Project, Attribute и User и их ассоциации. Кроме того, я включил код миграции на случай, если у меня возникнет проблема.
Кажется достаточно простым, но когда я делаю следующее в консоли rails:
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: attribute из модели проекта, я могу успешно создать проект.
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