2017-10-02 7 views
0

Ich habe folgende zwei ModelleSo führen Sie SQL-Joins in Schienen

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 

Ich habe folgenden Code in Controller

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

Der Rückgabe folgende Daten:

[ 
    { 
    "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" 
    }, 
] 

Ich möchte Verknüpfen Sie die Tabelle MyTableJoin mit MyTable und stellen Sie die Daten wie folgt her:

[ 
     { 
     "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 
      ... ... 
     }] 

Grundsätzlich möchte ich beide Tabellen verbinden und alle Daten aus MyTable und bestimmte Spalten von MyTableJoin zurückgeben. Wie kann ich das erreichen?

habe ich versucht, Rahmen zu schaffen, wie

scope :with_joins_data, joins(:my_table_joins) 

folgt aber versuchen, herauszufinden, wie ich die Spalten nur wählen kann ich aus my_columns_table benötigen

+0

Warum nicht nur eine JSON-Vorlage einrichten, die die Struktur, die Sie benötigen, z. http://railscasts.com/episodes/322-rabl – jamesc

+0

Yeah .. oder jbuilder .. es sei denn, Sie möchten die SQL-Abfrage mit Select-Anweisung schreiben. – Anton

+0

Danke, ich werde Ansichten erstellen. Können Sie mir sagen, wie ich den Verbindungsteil durchführe? –

Antwort

0

Wenn du mit der jbuilder Idee gehen, könnten Sie erstellen Sie eine Ansicht mit der folgenden, nachdem Sie hinzugefügt haben/konfiguriert, um das Juwel in Ihrem Projekt:

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 

Es gibt viele verschiedene Art und Weise konnte man c baue das auf. Das Obige ist einer von ihnen. Sie können auch partial! oder extract! verwenden. Wenn Sie alle diese Ressourcen laden müssen, wäre es besser, wenn Sie MyTable.includes(:my_table_joins) anstelle von MyTable.all ausführen würden.

Hoffe, dass hilft.