【发布时间】:2016-04-01 11:39:21
【问题描述】:
我有 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。
另外,如何通过Admin 表将数据插入User 和Client 表中。
【问题讨论】:
-
查看日志可以看到,当你保存一个新的客户端时,它只会创建
Client记录,而不会创建Admin记录。而搜索查询正在查看Admin表并且找不到任何记录。尝试类似:c = Client.create(name: "name")然后User.first.clients << c -
是的,谢谢@Kkulikovskis 的回复,我已经尝试过你所说的,但问题是当我这样做时,它给了我,并且用户名的错误不能为空,这是在管理模型中和当我尝试提供用户名时,它会显示未知属性“用户名”
-
哦,对不起。没有注意到用户名字段。那么在那种情况下,除了单独创建它们之外,我没有看到任何其他方式。例如
c = Client.new(name: name); u = User.first; Admin.create(username: username, client: c, user: u) -
nups 不工作它只是说开始事务回滚事务和 Client.first.users 仍然是#<:associations::collectionproxy>
-
我的错。客户端对象未持久化到数据库。检查我的答案,看看它是否有效
标签: ruby ruby-on-rails-4 activerecord has-many-through