je suit deux modèlesComment effectuer les jointures SQL dans des rails
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
Je le code ci-dessous dans le contrôleur
def index
@my_table_data = MyTable.all
render(json: @my_table_data) && return unless @my_table_data.empty?
render_error(:not_found, 'something...')
end
Il retourne données suivantes:
[
{
"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"
},
]
Je veux joignez la table MyTableJoin avec MyTable et produisez les données comme suit:
[
{
"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
... ...
}]
Fondamentalement je veux joindre les deux tables et renvoyer toutes les données de MyTable et l'ensemble spécifique de colonnes de MyTableJoin. Comment puis-je y parvenir?
J'ai essayé de créer la portée comme suit
scope :with_joins_data, joins(:my_table_joins)
Mais essayer de comprendre comment puis-je sélectionner uniquement les colonnes dont j'ai besoin my_columns_table
Pourquoi ne pas simplement configurer un modèle json qui définit la structure dont vous avez besoin, par ex. http://railscasts.com/episodes/322-rabl – jamesc
Ouais .. ou jbuilder .. sauf si vous voulez écrire la requête sql avec l'instruction select. – Anton
Merci, je vais créer des vues. Pouvez-vous me dire comment puis-je effectuer la partie de liaison si? –