Ruby on rails Rails4和Cocoon-如何处理有一个关系
我正在尝试处理Rails4应用程序中的嵌套表单,但是has_-one关系有问题,因为所有GEM文档都只针对has_-many。当我尝试创建一个新的考试时,应用程序会抛出“UnpermittedParameters:exam_Status”消息。可能我的单数和复数名称有问题,但是你能检查一下这个代码有什么问题吗。这是我的密码 考试。rb:Ruby on rails Rails4和Cocoon-如何处理有一个关系,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,我正在尝试处理Rails4应用程序中的嵌套表单,但是has_-one关系有问题,因为所有GEM文档都只针对has_-many。当我尝试创建一个新的考试时,应用程序会抛出“UnpermittedParameters:exam_Status”消息。可能我的单数和复数名称有问题,但是你能检查一下这个代码有什么问题吗。这是我的密码 考试。rb: class Examination < ActiveRecord::Base has_one :exam_status, dependent: :de
class Examination < ActiveRecord::Base
has_one :exam_status, dependent: :destroy
accepts_nested_attributes_for :exam_status, :reject_if => :all_blank, :allow_destroy => true
end
.....
def new
@examination = Examination.new
end
def create
@examination = Examination.new(examination_params)
respond_to do |format|
if @examination.save
format.html { redirect_to examinations_path, notice: 'success' }
else
format.html { render action: 'new' }
end
end
end
private
def set_examination
@examination = Examination.find(params[:id])
end
def examination_params
params.require(:examination).permit(:name, :shortname, :fee, :exam_status => [:first_application_date, :last_application_date, :examination_id])
end
查看/检查/new.html.erb=>
<%= simple_form_for(@examination) do |f| %>
<%= f.input :name %>
<%= f.input :shortname %>
<%= f.input :fee %>
<%= f.simple_fields_for :exam_status do |exam_status| %>
<%= render 'exam_status_fields', :f => exam_status %>
<% end %>
<% end %>
<div class="nested-fields">
<%= f.input :first_application_date, as: :datetime %>
<%= f.input :last_application_date, as: :datetime %>
<%= f.input :examination_id %>
</div>
Started POST "/examinations" for 127.0.0.1 at 2014-07-03 16:43:30 +0300
Processing by ExaminationsController#create as HTML
Parameters: {"utf8"=>"✓",
"authenticity_token"=>"uYpiZ9Z1txaJ1mib+NEAG7Ckwm9F3TyNQ6jRpYz3ncA=",
"examination"=>{"name"=>"nnnnn", "shortname"=>"nnnnnn", "fee"=>"33",
"exam_statuses"=>{"first_application_date(3i)"=>"3", "first_application_date(2i)"=>"7", "first_application_date(1i)"=>"2014", "first_application_date(4i)"=>"16", "first_application_date(5i)"=>"43", "last_application_date(3i)"=>"5", "last_application_date(2i)"=>"7", "last_application_date(1i)"=>"2014", "last_application_date(4i)"=>"16", "last_application_date(5i)"=>"43", "examination_id"=>""}}}
Unpermitted parameters: exam_statuses
这里有一些问题 1。控制器 在新的
方法中,您需要为检查建立检查状态:
# GET /examinations/new
def new
@examination = Examination.new
@examination.build_exam_status
end
在您的检查参数方法中,您需要将其更改为:
def examination_params
params.require(:examination).permit(:name, :shortname, :fee, exam_status_attributes: [:first_application_date, :last_application_date, :_destroy])
end
请注意,:exam\u status
需要是exam\u status\u attributes
,而不需要examing\u id
参数(Rails负责)。还要注意,我添加了\u destroy
。这是用于销毁对象的标志
2。嵌套字段部分
从部分列表中删除检查id
字段
<div class="nested-fields">
<%= f.input :first_application_date, as: :datetime %>
<%= f.input :last_application_date, as: :datetime %>
</div>
这些更改将解决问题。考试状态与考试状态不匹配。是的,这很明显!那么答案是什么呢?不是原因。您是否尝试在def-examice\u-params
中将“考试状态”更改为“考试状态”,为什么此问题同时标记为“考试状态”和“考试状态”?为什么用cocoon gem标记此问题?谢谢您,先生!这是伟大的工作和你的解释是完美的。谢谢