通过关联找到模型的正确方法

时间:2015-11-19 19:46:05

标签: sql ruby-on-rails ruby rails-activerecord

这两个产生相同的结果:

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级别的内容,但我找不到任何内容。

1 个答案:

答案 0 :(得分:2)

您的情况没有显着差异。但是,如果account关联是多态的,例如当有商家帐户和个人帐户时,where(account: a)会生成类似WHERE account_type = 'Business' AND account_id = '123'的内容,而where(account_id: a)只生成WHERE account_id = '123'