这两个产生相同的结果:
User.where(account: 1)
User.where(account_id: 1)
但生成的SQL不同:
/* User.where(account: 1) */
SELECT "users".* FROM "users" WHERE "users"."account_id" = 1
/* User.where(account_id: 1) */
SELECT "users".* FROM "users" WHERE "users"."account_id" = $1 [["account_id", 1]]
这两个都生成与第一个版本相同的SQL:
a = Account.find(1)
User.where(account: a)
User.where(account_id: a)
# SELECT "users".* FROM "users" WHERE "users"."account_id" = 1
那么通过关联找到模型的正确方法是什么?第二个版本比第一个版本更安全吗?我试图在第二版中搜索SQL级别的内容,但我找不到任何内容。
答案 0 :(得分:2)
您的情况没有显着差异。但是,如果account
关联是多态的,例如当有商家帐户和个人帐户时,where(account: a)
会生成类似WHERE account_type = 'Business' AND account_id = '123'
的内容,而where(account_id: a)
只生成WHERE account_id = '123'
。