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

时间:2015-07-19 01:04:11

标签: ruby-on-rails ember.js rails-api

我使用rails作为ember应用程序的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强大的参数:

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 #create:

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的一个实例,但我正在传递params。做了一些研究我已经看到我应该使用entity_application_links_attributes代替,但似乎期望在创建方法中我没有loan_application_id

另外我认为这违反了创建数据的ember方法,但我还没有开始。

我相信我走的是正确的道路,但有些事情并没有加起来,而且已经花了我太多时间。

我仍在努力,所以如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

好像你的示例代码中可能缺少某些内容?

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

无论如何,我认为您希望强大的params设置为使用entity_application_links_attributes而不是entity_application_links,否则活动记录将期望传递实体应用程序链接的实例。