Im пытается создать мое первое обновление моего CRUD, но im получает странную ошибку проверки. По моему мнению, есть поле для ввода даты. Он приходит в контроллер о формате: дд/мм/ггггДата из формы справа, но не сдавать проверку на модели
Так на моих События контроллера, обновление и require_params выглядит следующим образом:
def update
@event = Event.find(params[:id])
puts '----params date----'
puts event_params[:date]
puts '----params date----'
if @event.update_attributes(event_params)
flash[:notice] = "Evento atualizado com sucesso."
redirect_to @event
else
@event_count = Event.count
render('edit')
end
end
private
def event_params
params.require(:event).permit(:event, :place, :link, :participants, :date)
end
И мой событие модель :
# include ER
class Event < ApplicationRecord
scope :datedesc, lambda {order("date desc")}
HUMANIZED_ATTRIBUTES = {
:date => "Data"
}
def self.human_attribute_name(attr, options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
validates :event, :place, :link, :participants, :date, presence: true
validates :event, :place, :link, :participants, length: { maximum: 255 }
# validates :date, format: {with: ER::DATE, message: "Data fora do padrão", :multiline => true}
validates :date, format: {:with => /\d{2}\/\d{2}\/\d{4}/, :message => "Data precisa estar no padrão dd/mm/yyyy"}
end
Итак, когда я нажимаю кнопку «Отправить» на просмотр, я продолжаю получать сообщение о проверке даты. Но дата идет в правильном формате. Я вижу это на консоли, используя команду put.
Мне очень сложно отлаживать рельсы, поэтому иногда консоль не отображает всю информацию, которую я хотел, и я продолжаю застревать. Почему обновление не работает, и есть ли что-то, что я могу сделать для улучшения отладки моих приложений? Например, на php я мог бы делать var_dump и умирать везде, где захочу, используя рельсы, я не знаю, смогу ли я сделать что-то подобное. Могу я?
Это выход на моей консоли:
Started PATCH "/admin/events/1" for 127.0.0.1 at 2017-02-23 13:34:13 -0300
Processing by Admin::EventsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZVX7nRd67A0RDlYwcgKRyLLsh4GicmicF7AWB6LWGtnzT4T79GkHk8DJyZLQm2lc4gos1idZ5LYGz37Nv97Wrg==", "event"=>{"event"=>"Evento 1", "place"=>"Rua Teste 123", "link"=>"www.google.com", "participants"=>"Felipe, Fernando, Rodrigo", "date"=>"25/02/2017"}, "commit"=>"Atualizar Evento", "id"=>"1"}
Event Load (0.0ms) SELECT `events`.* FROM `events` WHERE `events`.`id` = 1 LIMIT 1
----params date----
25/02/2017
----params date----
(0.0ms) BEGIN
(0.0ms) ROLLBACK
(0.0ms) SELECT COUNT(*) FROM `events`
Rendering admin/events/edit.html.erb within layouts/admin
Rendered admin/events/_form.html.erb (2.0ms)
Rendered admin/events/edit.html.erb within layouts/admin (39.0ms)
Rendered admin/_menu.html.erb (1.0ms)
Rendered admin/_rodape.html.erb (1.0ms)
Completed 200 OK in 257ms (Views: 200.8ms | ActiveRecord: 0.0ms)
Rails.logger может быть полезен для такого рода отладки, также есть красивый драгоценный камень, называемый byebug. Если вы хотите что-то похожее на var_dump, вы можете попробовать вызвать метод проверки объектов, которые вы пытаетесь отлаживать. – zilvinas
Спасибо за отзыв об отладке @zilvinas. Вы знаете, что может произойти с моим процессом проверки? – churros
Я не уверен, я бы предложил сделать некоторые из моих предложенных попыток. Возможно, что-то пойдет не так в методе event_params. И небольшой совет: то, как вы проверяете дату, не является лучшей практикой, поскольку это правило регулярных выражений по-прежнему допускает ряд недопустимых дат. Вместо этого, помимо проверки формата, я бы рекомендовал добавить настраиваемый блок проверки, в котором вы могли бы попытаться проанализировать заданную дату и вернуть false, если синтаксический разбор не выполняется. – zilvinas