Это мой первый вопрос, так голый со мной и с моим английским, поскольку это не мой родной язык. У меня есть 3 модели (Клиент, Пользователь и Администратор) без контроллероввставить данные через третью таблицу
class Admin < ActiveRecord::Base
validates_presence_of :username, :user_id, :client_id
belongs_to :client
belongs_to :user
end
class Client < ActiveRecord::Base
validates_presence_of :name
has_many :admins
has_many :users, :through => :admins
end
class User < ActiveRecord::Base
validates_presence_of :name, :email
has_many :admins
has_many :clients, :through => :admins
end
Так что, когда я делаю
u = User.first.clients.new(name: 'First Client')
u.save
Тогда все работает отлично
(0.2ms) begin transaction SQL (0.6ms) INSERT INTO "clients" ("name",
"created_at", "updated_at") VALUES (?, ?, ?) [["name", "First
Client"], ["created_at", "2015-12-27 10:38:47.790787"], ["updated_at",
"2015-12-27 10:38:47.790787"]] (98.3ms) commit transaction =>
true
, но когда я пытаюсь см.
2.2.2 :130 > User.first.clients
User Load (0.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 Client Load (0.2ms) SELECT "clients".* FROM "clients" INNER JOIN "admins" ON "clients"."id" = "admins"."client_id" WHERE "admins"."user_id" = ? [["user_id", 1]] => #<ActiveRecord::Associations::CollectionProxy []>
Итак, как мне вставить данные в третью таблицу? У меня есть много об этом, но нет решения, так как усложнение здесь состоит в том, что в третьей таблице Admin
также есть обязательная колонка Username
. Также как вставить данные в таблицы User
и Client
через этот стол Admin
. Любое решение будет оценено по достоинству.
Если вы проверяете журналы, вы можете увидеть, что при сохранении нового клиента, он будет создавать только 'под клиентом запись, но не' admin' записи , В то время как поисковый запрос просматривает таблицу «Admin» и не может найти никаких записей. Попробуйте что-то вроде: 'c = Client.create (name:" name ")', а затем 'User.first.clients << c' – Kkulikovskis
Yea спасибо за ответ @Kkulikovskis Я уже пробовал то, что вы сказали, но в этом проблема в том, когда я делаю это, это дает мне, и ошибка имени пользователя не может быть пустым, которая находится в модели администратора, и когда я пытаюсь указать имя пользователя, а затем он говорит неизвестный атрибут «имя пользователя» –
О, извините. Не заметил поля имени пользователя. В этом случае я не вижу другого способа, кроме как просто создать каждого из них отдельно. например 'c = Client.new (имя: имя); u = User.first; Admin.create (username: username, client: c, user: u) ' – Kkulikovskis