2017-02-22 1 views
0

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) 
+0

Rails.logger может быть полезен для такого рода отладки, также есть красивый драгоценный камень, называемый byebug. Если вы хотите что-то похожее на var_dump, вы можете попробовать вызвать метод проверки объектов, которые вы пытаетесь отлаживать. – zilvinas

+0

Спасибо за отзыв об отладке @zilvinas. Вы знаете, что может произойти с моим процессом проверки? – churros

+0

Я не уверен, я бы предложил сделать некоторые из моих предложенных попыток. Возможно, что-то пойдет не так в методе event_params. И небольшой совет: то, как вы проверяете дату, не является лучшей практикой, поскольку это правило регулярных выражений по-прежнему допускает ряд недопустимых дат. Вместо этого, помимо проверки формата, я бы рекомендовал добавить настраиваемый блок проверки, в котором вы могли бы попытаться проанализировать заданную дату и вернуть false, если синтаксический разбор не выполняется. – zilvinas

ответ

0

я дать ответ на ваш комментарий здесь. Обычно нет лучшего способа сделать что-то, мой предложенный способ заключается в том, как я могу справиться с такой ситуацией. Об исключении из рубинов вы можете узнать здесь: https://ruby-doc.org/core-2.4.0/Exception.html. Для выборочной проверки, пожалуйста, прочитайте: http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validate. Вы можете использовать специальную проверку совместимости и обработку исключений для решения вашей проблемы. Кроме того, это возможно сделать в вашем контроллере, завернув обновление объекта в предложении begin/rescue.

Смежные вопросы