fields_for 未在 rails 5.0.1 中保存嵌套参数
fields_for not saving nested parameters in rails 5.0.1
我是 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 %>
我很确定这是一个非常简单的表格,但不知何故拒绝保存到数据库中。
在 eventdate.rb
模型中,将 optional: true
附加到此行:belongs_to :event
class Eventdate < ApplicationRecord
belongs_to :event, optional: true
validates :date, :start_hour, :finish_hour, :event_id, presence: true
end
因为 Rails 将首先创建 eventdates
,然后创建 event
并链接到那些 evendates
(通过更新这些 [=16] 中的所有 event_id
=]).但是创建eventdates
时,第event_id
列是nil
,无法保存eventdates
我是 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 %>
我很确定这是一个非常简单的表格,但不知何故拒绝保存到数据库中。
在 eventdate.rb
模型中,将 optional: true
附加到此行:belongs_to :event
class Eventdate < ApplicationRecord
belongs_to :event, optional: true
validates :date, :start_hour, :finish_hour, :event_id, presence: true
end
因为 Rails 将首先创建 eventdates
,然后创建 event
并链接到那些 evendates
(通过更新这些 [=16] 中的所有 event_id
=]).但是创建eventdates
时,第event_id
列是nil
,无法保存eventdates