Ruby on rails 不了解Arel的用法(Rails)
我一直在研究Arel(主要是因为它在高级搜索的RansackGem中的使用)。我看过一些指南,但我不太了解它是如何工作的 例如有Ruby on rails 不了解Arel的用法(Rails),ruby-on-rails,ruby,activerecord,arel,Ruby On Rails,Ruby,Activerecord,Arel,我一直在研究Arel(主要是因为它在高级搜索的RansackGem中的使用)。我看过一些指南,但我不太了解它是如何工作的 例如有 users = Arel::Table.new(:users) users.where(users[:name].eq('amy')) # => SELECT * FROM users WHERE users.name = 'amy' 这将生成一个SQL查询,但不会执行它。 如何使用结果?Arel应该如何编写&在哪里(模型、视图、控制器?) 我知道这似乎有点宽
users = Arel::Table.new(:users)
users.where(users[:name].eq('amy'))
# => SELECT * FROM users WHERE users.name = 'amy'
这将生成一个SQL查询,但不会执行它。
如何使用结果?Arel应该如何编写&在哪里(模型、视图、控制器?)
我知道这似乎有点宽泛,但我想了解的是在哪里/如何使用arel在我的表格中进行搜索。arel的一个用途是为您的模型建立条件。知道Rails本身在引擎盖下使用Arel也是很有用的,无论您何时进行这样的查询:
User.where(name: 'amy')
Arel将相当于:
User.where(User.arel_table[:name].eq('amy'))
显然,在本例中,不需要直接编写Arel,但Arel允许在代码中编写更复杂的查询,而您通常需要下拉到手写SQL子句(例如在,
,“这将生成SQL查询,但不会执行它”如果要在变量(例如,users\u named\u amy=users.where(users[:name].eq('amy'))
中捕获该结果,则可以使用与任何其他AR查询相同的方式对结果User
对象执行操作?
User.where('age >= ?', 18)
User.where(User.arel_table[:age].gteq(18))
table = User.arel_table
sql = table.project(:id).where(table[:name].eq('amy')).to_sql # => "SELECT id FROM \"users\" WHERE \"users\".\"name\" = 'amy'"
ActiveRecord::Base.connection.execute(sql)