fields_for不保存rails 5.0.1中的嵌套参数

时间:2017-04-11 01:58:40

标签: nested save ruby-on-rails-5 fields-for

我对rails非常陌生,虽然我已经制作了一些基本的应用程序并阅读了几个教程,但这是我第一次深入研究表单中的嵌套属性和使用fields_for。

我已经通过许多类似的问题进行了搜索,并且已经阅读了fields_for上的文档,但是每当我在表单中使用fields_for时,我的表单似乎都无法保存。我已经在没有fields_for的情况下进行了测试并保存了它(显然没有保存到嵌套数据库)。

我尝试做的是一个简单的事件注册,它又在一个单独的模型中有一些属性和日期。

我已尝试使用和不使用验证,在强参数中有许多不同的内容

这是我的活动模特:

class Event < ApplicationRecord
  has_many :eventdates, dependent: :destroy
  accepts_nested_attributes_for :eventdates

  validates :name, :description, :city, :street, :postal_code, presence: true

end

Eventdate模型:

class Eventdate < ApplicationRecord
  belongs_to :event

  validates :date, :start_hour, :finish_hour, :event_id, presence: true
end

事件控制器:

class EventsController < ApplicationController

  def new
    @event = Event.new
    @event.eventdates.build
  end

  def create
    @event = Event.new(event_params)
    if @event.save
      redirect_to root_url
    else
      render "static_pages/home"
    end
  end

  private

    def event_params
      params.require(:event).permit(:name, :description, :street, :city, :postal_code, :address_number, :additional_info, 
      eventdates_attributes: [:id, :date, :start_hour, :finish_hour, :event_id])
    end

形式:

<%= form_for(@event, url: events_path) do |f| %>
  <p>
    <%= f.label :nombre %>
    <%= f.text_field :name %>
  </p>

  <div>
    <%= f.fields_for :eventdates do |eventdate_fields| %>

      <%= eventdate_fields.label :fecha %>
      <%= eventdate_fields.date_field :date %>

      <%= eventdate_fields.label :hora_de_inicio %>
      <%= eventdate_fields.time_field :start_hour %>

      <%= eventdate_fields.label :hora_de_termino %>
      <%= eventdate_fields.time_field :finish_hour %>
    <% end %>
  </div>

  <p>
  <%= f.label :infomación_adicional %>
  <%= f.text_area :additional_info %>
  </p>

  <p>
    <%= f.submit "Crear evento" %>
  </p>
<% end %>

我非常确定这是一个非常简单的表单,但不知何故拒绝保存到数据库中。

1 个答案:

答案 0 :(得分:1)

for(String value : courses) { if(courses.contains(value)) { a=false; break; } a=true; } 模型中,将eventdate.rb附加到此行:optional: true

belongs_to :event

因为Rails会先创建class Eventdate < ApplicationRecord belongs_to :event, optional: true validates :date, :start_hour, :finish_hour, :event_id, presence: true end ,然后创建eventdates并链接到event(通过更新这些evendates中的所有event_id)。但是,在创建evendates时,eventdates列为event_idnil无法保存。