2017-04-11 67 views
3

雖然我已經做了一些基本的應用程序並閱讀了幾個教程,但對於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 %> 

我敢肯定,這是一個非常簡單的形式,但不知何故,拒絕所有保存到數據庫中。

回答

1

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,然後(通過更新這些evendates所有event_id)創建event和鏈接到那些evendates。但創建eventdates時,列event_idnil,並且eventdates無法保存。

+0

不幸的是,您的回答讓我更好地理解了表單如何處理事情,所以我會嘗試更改驗證等以及您的答案。 – Bluespheal

+0

我編輯了eventdate驗證,現在它完美的工作,謝謝一堆。 – Bluespheal

+1

不客氣。我通常會在'create'動作中加入'debugger'來解決問題。你以前試過了嗎? – fongfan999