2015-07-19 58 views
0

我正在使用rails作爲一個呃應用程序的API服務(可能不是正確的方法,但忍受着我)。我正努力讓自己的頭腦圍繞着我主要模型的強大參數。has_many的強參數:通過 - Rails-API

我的車型有:

class LoanApplication < ActiveRecord::Base 
# Relationships 
    has_many :entity_application_links 
    has_many :entities, through: :entity_application_links 

# Nested attributes_for 
    accepts_nested_attributes_for :entity_application_links, :entities 
end 

class EntityApplicationLink < ActiveRecord::Base 
# Relationships 
    belongs_to :entity 
    belongs_to :loan_application 
end 

class Entity < ActiveRecord::Base 
    # Relationships 
    has_many :entity_application_links 
end 

我LoanApplicationController強PARAMS:

def loan_application_params 
    params.require(:loan_application).permit(
    :title, 
    :application_state_id, 
    :custom_data, 
    :user_id, 
    entity_application_links: [ 
     :id, 
     :loan_application_id, 
     :entity_id, 
     entity: [:name] 
    ] 
) 
end 

測試這個我發送以下數據LoanApplicationController#創建:

def create 
    @loan_application.user = current_user 

    if @loan_application.save 
    render json: @loan_application, status: :created 
    else 
    render json: @loan_application.errors, status: :unprocessable_entity 
    end 
end 

數據:

{ 
    :title=>"Jeanie Deckow", 
    :entity_application_links=>[ 
     { 
      :entity=>{:name=>"entity1"} 
     } 
    ] 
} 

我已經嘗試了大量的測試數據和強參數的變體,但它似乎從來沒有似乎工作。

隨着目前的配置我得到EntityApplicationLink(#69859611738960) expected, got ActionController::Parameters(#69859594766540) ,我認爲它期待的EntityApplicationLink實例,但我傳遞參數。做一些研究,我已經看到,我應該使用entity_application_links_attributes來代替,但似乎預計loan_application_id,我沒有在創建方法。

另外我相信這是違背創建數據的燼方法,但我還沒有開始。

我相信我走在正確的道路上,但有些東西沒有加起來,這已經耗費了我太多的時間。

我仍在爲此工作,所以如果您需要更多信息,請告訴我。

回答

1

似乎在您的示例代碼中可能缺少某些東西?

我假設在創建操作之前的某個時間點 - 也許在過濾器之前 - 您正在設置貸款申請的實例?

無論如何,我認爲你會希望你堅強的PARAMS設置爲使用entity_application_links_attributes而非entity_application_links,否則活動記錄將被期待的實體應用程序鏈接的實例中傳遞。

+0

貌似這是它,我確信我嘗試過,但之前沒有工作。也許我正在傳遞不同的數據。 – Rick