Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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
Sql Rails 3.2 ActiveRecord从两个类似的表中选择结果_Sql_Ruby On Rails_Ruby_Activerecord_Rails Postgresql - Fatal编程技术网

Sql Rails 3.2 ActiveRecord从两个类似的表中选择结果

Sql Rails 3.2 ActiveRecord从两个类似的表中选择结果,sql,ruby-on-rails,ruby,activerecord,rails-postgresql,Sql,Ruby On Rails,Ruby,Activerecord,Rails Postgresql,这感觉像是一些应该已经得到回答的问题,但我的search foo让我失望了 在Rails 3.2中,假设我们有两个DB表,它们的列与我们在本选择中关心的列完全相同,如下所示: create_table "current_employees" do |t| t.string "first_name" t.string "middle_name" t.string "last_name" . . . more columns end create_table "e

这感觉像是一些应该已经得到回答的问题,但我的search foo让我失望了

在Rails 3.2中,假设我们有两个DB表,它们的列与我们在本选择中关心的列完全相同,如下所示:

create_table "current_employees" do |t|
  t.string    "first_name"
  t.string    "middle_name"
  t.string    "last_name"
  . . . more columns
end

create_table "ex_employees" do |t|
  t.string    "first_name"
  t.string    "middle_name"
  t.string    "last_name"
  . . . more columns
end
是的,虚构的例子:现在就去做吧

当人力资源部想要查找一名现任或前任员工时,他们不想区分这两个表:他们需要的结果可能在任何一个表中

如何设置模型、控制器等以从任一表中获取结果

例如,Jack Jackson在
current_employees
表中,Jack O'Lantern在
ex_employees
表中。搜索“Jack”时,结果表应该有两行,一行是Jack Jackson,另一行是Jack O'Lantern


更新为指定Rails 3.2。

您必须执行两个不同的查询,并在单个数组中获得所有结果

search_results = []
search_results += CurrentEmployee.where("name like '%Jack%'").all
search_results += ExEmployee.where("name like '%Jack%'").all

现在在视图中显示数组中的所有记录

如果不需要对数据库进行更改,可以使用一个合并两个表的视图,并从该视图进行建模

class Employee < ActiveRecord::Base
  self.table_name = 'Employeeview'
  self.primary_key = 'employee_id'

  protected

  def readonly?
    true
  end
end
class Employee
在不知道正在使用哪个版本的Rails的情况下,您可以使用
Arel
为外部联接生成SQL查询,例如:

Arel::Table.new(:current_employees).join(Arel::Table.new(:ex_employees), Arel::Nodes::OuterJoin).on(Arel::Table.new(:current_employees)[:first_name].eq(Arel::Table.new(:ex_employees)[:first_name]))
这将生成以下SQL查询:

irb(main):001:0> Arel::Table.new(:current_employees).join(Arel::Table.new(:ex_employees), Arel::Nodes::OuterJoin).on(Arel::Table.new(:current_employees)[:first_name].eq(Arel::Table.new(:ex_employees)[:first_name])).to_sql
=> "SELECT FROM \"current_employees\" LEFT OUTER JOIN \"ex_employees\" ON \"current_employees\".\"first_name\" = \"ex_employees\".\"first_name\""

说得好。更新问题以指定我在Rails 3.19上。此:
CurrentEmployees.joins(“完全外部连接ex_employees”)。我认为(“名字像“?%”,“Jack”)
应该在哪里工作