这是我第一次尝试使用与Rails 4关联的模型,由于某些原因,由于“未经许可的参数”错误,我无法获得POST参数。我试图以不同的方式允许相关字段,但没有成功。
基本上,我有一个关联人员的收养申请。
if(!@$_SESSION['login'])
{
header("location: logingpage.php");
exit();
}
和
class AdoptionRequest < ActiveRecord::Base
has_one :person
accepts_nested_attributes_for :person
end
以下是adoption_requests_controller.rb的相关章节:
class Person < ActiveRecord::Base
belongs_to :adoption_request
end
视图中的表单使用rails-bootstrap-forms生成:
def create
@adoption_request = AdoptionRequest.new(adoption_request_params)
respond_to do |format|
if @adoption_request.save
format.html { redirect_to @adoption_request, notice: 'Adoption request was successfully created.' }
format.json { render action: 'show', status: :created, location: @adoption_request }
else
format.html { render action: 'new' }
format.json { render json: @adoption_request.errors, status: :unprocessable_entity }
end
end
end
private
def adoption_request_params
params.require(:adoption_request).permit(person_attributes: [:first_name, :last_name])
end
以下是为第一个名称字段生成的HTML示例:
= bootstrap_form_for @adoption_request do |f|
= f.fields_for @adoption_request.person do |owner_fields|
= owner_fields.text_field :first_name
= owner_fields.text_field :last_name
= f.submit
现在,当我提交以下POST有效负载时:
<input class="form-control" id="adoption_request_person_first_name" name="adoption_request[person][first_name]" type="text">
已创建采用请求,但相关人员未创建。这似乎正在发生,因为强参数不允许人参数通过。例如,我在rails控制台输出中看到了这一点:
{"utf8"=>"✓", "authenticity_token"=>"kE1Q222VzXRsuLnhiO0X3mijW1TGTWSAOVgVDz/rxsE=", "adoption_request"=>{"person"=>{"first_name"=>"John", "last_name"=>"Smith"}}, "commit"=>"Create Adoption request"}
根据强参数文档,此配置应该有效,但我也尝试过:
Unpermitted parameters: person
导致相同的错误(“未经许可的参数:人”)和
params.require(:adoption_request).permit(:person, person_attributes: [:first_name, :last_name])
允许参数通过,但这不是一个可接受的解决方案,因为它否定了使用强参数的整个目的。
我做错了什么?
这是我的Gemfile,以防它有用:
params.require(:adoption_request).permit!
应用程序本身比这更复杂。我简化了它来说明问题。
提前感谢您的帮助!
答案 0 :(得分:1)
您需要更改此行
= f.fields_for @adoption_request.person do |owner_fields|
到
= f.fields_for :person do |owner_fields|
答案 1 :(得分:0)
我只想尝试在保存时构建Person对象。将名字和姓氏作为隐藏字段传递。
否则我会给strong parameters一个读数。
if @adoption_request.save
@adoption_request.persons.build(first_name: @first_name, last_name: @last_name)