Я пытаюсь перейти от отношения has_many, own_to к has_many: через отношения с моей моделью Project и User.Однако, когда я тестирую его в консоли rails, в модели соединения, кажется, устанавливается только одна сторона отношения.
В настоящее время я настраиваю его так:
class Project < ActiveRecord::Base
has_many :collaborations
has_many :users, :through => :collaborations
end
class User < ActiveRecord::Base
has_many :collaborations
has_many :projects, :through => :collaborations
end
class Collaboration < ActiveRecord::Base
belongs_to :project
belongs_to :user
end
Затем вконсоль, которую я набираю:
me = User.find(1)
p = Project.new(:name => "somename")
p.users << me
p.save
И что происходит, так это то, что модель Collaboration получает набор project_id, но не user_id.
И происходит обратное (user_id устанавливается, но не project_id), когда я делаю что-то вроде этого:
me.projects << p
По сути, это создает «Сотрудничество», но только одну сторонуотношения спасаются.
Я застрял в этом в течение нескольких часов, и я чувствую, что это что-то незначительное - возможно, что-то осталось от того, когда я делал отношения один-ко-многим между этими двумя моделями.
--- Редактировать --- Вот как выглядит схема:
create_table "collaborations", :force => true do |t|
t.integer "project_id"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "projects", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "shared", :default => false
t.integer "position", :default => 0
t.string "permalink"
t.text "description"
end
create_table "users", :force => true do |t|
t.string "username"
t.string "email"
t.string "crypted_password"
t.string "password_salt"
t.string "persistence_token"
t.datetime "created_at"
t.datetime "updated_at"
t.string "role"
t.string "first_name"
t.string "last_name"
t.string "perishable_token", :default => "", :null => false
t.integer "avatar", :default => 0
end
Любая помощь будет очень признательна!