has_many的强参数:通过 - Rails-API

问题描述:

我正在使用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,我没有在创建方法。

另外我相信这是违背创建数据的烬方法,但我还没有开始。

我相信我走在正确的道路上,但有些东西没有加起来,这已经耗费了我太多的时间。

我仍在为此工作,所以如果您需要更多信息,请告诉我。

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

我假设在创建操作之前的某个时间点 - 也许在过滤器之前 - 您正在设置贷款申请的实例?

无论如何,我认为你会希望你坚强的PARAMS设置为使用entity_application_links_attributes而非entity_application_links,否则活动记录将被期待的实体应用程序链接的实例中传递。

+0

貌似这是它,我确信我尝试过,但之前没有工作。也许我正在传递不同的数据。 – Rick