Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails4和Cocoon-如何处理有一个关系_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails4和Cocoon-如何处理有一个关系

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

我正在尝试处理Rails4应用程序中的嵌套表单,但是has_-one关系有问题,因为所有GEM文档都只针对has_-many。当我尝试创建一个新的考试时,应用程序会抛出“UnpermittedParameters:exam_Status”消息。可能我的单数和复数名称有问题,但是你能检查一下这个代码有什么问题吗。这是我的密码

考试。rb:

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标记此问题?谢谢您,先生!这是伟大的工作和你的解释是完美的。谢谢