我使用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方法,但我还没有开始。
我相信我走的是正确的道路,但有些事情并没有加起来,而且已经花了我太多时间。
我仍在努力,所以如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
好像你的示例代码中可能缺少某些内容?
我假设在您创建操作之前的某个时刻 - 也许是在过滤器之前 - 您正在设置贷款申请实例?
无论如何,我认为您希望强大的params设置为使用entity_application_links_attributes而不是entity_application_links,否则活动记录将期望传递实体应用程序链接的实例。