【问题标题】:Strong params for has_many :through - Rails-APIhas_many 的强参数:通过 - Rails-API
【发布时间】:2015-07-19 01:04:10
【问题描述】:

我正在使用 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 实例,但我正在传递参数。做一些研究,我发现我应该改用entity_application_links_attributes,但这似乎期待一个loan_application_id,我在create方法中没有。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您的示例代码中似乎缺少某些内容?

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

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

    【讨论】:

    • 看起来就是这样,我确定我尝试过,但以前没有用。也许我传递了不同的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多