我有两个模型
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中选择我需要的列
答案 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
。
希望有所帮助。