2
我有以下型號:invoke方法
module FullcalendarEngine
class Event < ActiveRecord::Base
belongs_to :task
accepts_nested_attributes_for :task
end
end
class Task < ActiveRecord::Base
has_one :fullcalendar_engine_event, class_name: 'FullcalendarEngine::Event'
validates :name, presence: true
before_validation :check_if_event
def check_if_event
self.name ||= (fullcalendar_engine_event.present? ? (fullcalendar_engine_event.title || fullcalendar_engine_event.event_category.name) : nil)
self.name ||= 'Unknown Task'
end
end
在我的形式:
...
<%= f.fields_for :task, f.object.task do |task_builder| %>
...
現在,我得到阻止驗證錯誤從節約:
Task name can't be blank
雖然調用check_if_event方法(我使用ruby調試器並在其中放置斷點),但名稱分配不是存儲。如果是這樣,那麼這個錯誤不應該發生。
這answer暗示的validates_associated
添加到事件是這樣的:
accepts_nested_attributes_for :task
validates_associated :task
但這一切都不會是錯誤的陣列中添加額外的錯誤:
Task name can't be blank
Task is invalid
我不知道爲什麼「名稱不能爲空「的錯誤數組顯示在錯誤數組中時,我在before_validation
回調中爲該名稱指定了一個值。我在Rails 4.2中做了什麼錯誤?
這是一個很好的觀點。我會檢查這是否是問題。 – Donato