使用Rails 4.2.3
我想创建一个表单来更新模型(用户)并创建新表单(Project,Rewards,BankAccount)
我的模特:
class User < ActiveRecord::Base
has_many :projects
def self.permitted_params
[:id, :last_name, ... , bank_account_attributes: BankAccount.permitted_params]
end
...
end
class Project < ActiveRecord::Base
belongs_to :user
accepts_nested_attributes_for :user
def self.permitted_params
[:name, :description, ...]
end
...
end
形式:
<%= simple_form_for @project, html: { class: 'saveable-form' } do |f| %>
<%= f.input :name %>
...
<%= f.simple_fields_for :user do |user| %>
<%= render 'user_fields', f: user %>
<% end %>
<% end %>
控制器
class ProjectsController < ApplicationController
def new
@project = Project.new
@project.user = current_user
@project.user.build_bank_account
end
...
def project_params
params.require(:project).permit(
Project.permitted_params,
rewards_attributes: Reward.permitted_params,
user_attributes: User.permitted_params
)
end
end
这是一个非常简单的形式。
但是当我尝试提交时,我得到了这个:
Couldn't find User with ID=1 for Project with ID=
我得到了一个临时修复,发现here
这是对Rails 2.3.8的修复。 我希望有一个DRYer解决方案。
建议?有没有人已经遇到过这个问题,你是如何解决这个问题的?
以下是完整代码:
形式: http://pastebin.com/NwfxCJQH
答案 0 :(得分:0)
听起来你需要在课堂上使用倒数。在rails文档中查找,this article也提供了很好的解释。
顺便说一下,我同意@ max的注释重新允许属于控制器的参数。以下是如何将控制器中的参数列入白名单并包含关联的属性。
def user_params
params.require(:user).permit(
:id, :last_name, bank_account_attributes: [:id, :account_number, :sort_code]
)
end