Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 不了解Arel的用法(Rails)_Ruby On Rails_Ruby_Activerecord_Arel - Fatal编程技术网

Ruby on rails 不了解Arel的用法(Rails)

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应该如何编写&在哪里(模型、视图、控制器?) 我知道这似乎有点宽

我一直在研究Arel(主要是因为它在高级搜索的RansackGem中的使用)。我看过一些指南,但我不太了解它是如何工作的

例如有

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)