雖然我已經做了一些基本的應用程序並閱讀了幾個教程,但對於rails我還是比較陌生,這是我第一次深入探討嵌入窗體中的屬性,使用fields_for。fields_for沒有在rails中保存嵌套參數5.0.1
我已經搜索了很多類似的問題,並閱讀了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 %>
我敢肯定,這是一個非常簡單的形式,但不知何故,拒絕所有保存到數據庫中。
不幸的是,您的回答讓我更好地理解了表單如何處理事情,所以我會嘗試更改驗證等以及您的答案。 – Bluespheal
我編輯了eventdate驗證,現在它完美的工作,謝謝一堆。 – Bluespheal
不客氣。我通常會在'create'動作中加入'debugger'來解決問題。你以前試過了嗎? – fongfan999