导轨 - 如何根据条件而载入父装载嵌套的属性?

问题描述:

我有两个型号,即发票InvoiceDetails。一个发票有许多invoiceDetails。导轨 - 如何根据条件而载入父装载嵌套的属性?

现在,当我加载发票,它还装载了invoiceDetails由协会属性。所述invoiceDetails模型具有属性is_hide,我想加载这些嵌套属性其中is_hide = 0,在加载发票

发票控制器:

class Api::V1::InvoicesController < ApplicationController 
    respond_to :json 

    def index 
    company_id = params[:company_id] 
    if company_id 
     invoices = Invoice.where(company_id: company_id) 
     render json: invoices, status: 200 
    else 
     render json: { errors: "Company ID is NULL" }, status: 422 
    end 
    end 

    def show 
    cust_id = params[:customer_id] 
    invoice_id = params[:id] 
    if cust_id && invoice_id 
     invoice = Invoice.where(:id => invoice_id, :customer_id => cust_id) 
     render json: invoice, include: '**', status: 200 
    else 
     render json: { errors: "Customer ID or Invoice ID is NULL" }, status: 422 
    end 
    end 

    def create 
    Rails.logger.debug invoice_params.inspect 
    invoice = Invoice.new(invoice_params) 
    if invoice.save 
     render json: invoice, status: 201 
    else 
     render json: { errors: invoice.errors }, status: 422 
    end 
    end 

    def update 
    invoice_id = params[:id] 
    invoice = Invoice.find(invoice_id) 
    if invoice.update(invoice_params) 
     render json: invoice, status: 200 
    else 
     render json: { errors: invoice.errors }, status: 422 
    end 
    end 

    def invoice_params 
    invoice_params = params.require(:invoice).permit(:total_amount,:balance_amount, :customer_id, :totalTax, :totalDiscount, :bill_date,:company_id, { invoice_details: [:id,:invoice_id,:product_id,:quantity, :discount, :subtotal, :tax] }) 
    invoice_params[:invoiceDetails_attributes] = invoice_params.delete :invoice_details 
    invoice_params.permit! 
    end 
end 

我这是怎么加载一张发票:

getInvoice : { 
     url:'/api/v1/companies/:company_id/customers/:customer_id/invoices/:id', 
     method: 'GET', 
     isArray: true 
     } 

怎么可以这样对Rails 5做些什么呢?

+0

发表您的API控制器动作 –

假设它是show的行动,你打,你可以添加一个where子句像

def show 
    cust_id = params[:customer_id] 
    invoice_id = params[:id] 
    if cust_id && invoice_id 
    invoice = Invoice.includes(:invoice_details).where(:id => invoice_id, :customer_id => cust_id, 'invoice_details.is_hide' => 0) 
    render json: invoice, include: '**', status: 200 
    else 
    render json: { errors: "Customer ID or Invoice ID is NULL" }, status: 422 
    end 
end