如何在rails中执行sql连接

时间:2017-10-02 20:37:24

标签: ruby ruby-on-rails-4

我有两个模型

class MyTable < ApplicationRecord
  has_many :my_table_joins, dependent: :destroy
  validates :name, uniqueness: true
end

class MyTableJoin < ApplicationRecord
  belongs_to :some_column, polymorphic: true
  belongs_to :my_table
end

我在控制器中有以下代码

  def index
    @my_table_data = MyTable.all
    render(json: @my_table_data) && return unless @my_table_data.empty?
    render_error(:not_found, 'something...')
  end

返回以下数据:

[
  {
    "id": 1,
    "name": "SOME_NAME1",
    "created_at": "2017-09-28T18:51:51.000Z",
    "updated_at": "2017-09-28T18:51:51.000Z"
  },
  {
    "id": 2,
    "name": "SOME_NAME2",
    "created_at": "2017-09-28T18:51:51.000Z",
    "updated_at": "2017-09-28T18:51:51.000Z"
  },
]

我想将表MyTableJoin与MyTable连接并生成如下数据:

    [
      {
        "id": 1,
        "name": "SOME_NAME1",
        "created_at": "2017-09-28T18:51:51.000Z",
        "updated_at": "2017-09-28T18:51:51.000Z"
        "access_group_joins": [
           {
             "some_column": 1
             "some_column_type": "some data"
             "created_at": "2017-01-01 12:00:00",
             "updated_at": "2017-01-01 12:00:00"
           },
            ... ...
 ]
      }
        {
          "id": 2
          ... ...
        }]

基本上我想连接两个表并从MyTable返回所有数据,并从MyTableJoin返回特定的一组列。我怎样才能做到这一点?

我尝试按如下方式创建范围

scope :with_joins_data, joins(:my_table_joins)

但是试图找出如何从my_columns_table中选择我需要的列

1 个答案:

答案 0 :(得分:0)

如果您使用jbuilder想法,则可以在项目中添加/配置gem之后使用以下内容创建视图:

json.array! @my_table_data do |data|
  json.id data.id
  json.name data.name
  json.created_at data.created_at
  json.updated_at data.updated_at

  json.access_group_joins @my_table_data.my_table_joins do |join_data|
    json.some_column join_data.id
    json.some_column_type join_data.name
    json.created_at join_data.created_at
    json.updated_at join_data.updated_at
  end
end

你可以通过很多不同的方式来构建它。以上就是其中之一。您还可以使用partial!extract!

如果您需要加载所有这些资源,最好是运行MyTable.includes(:my_table_joins)而不是MyTable.all

希望有所帮助。