2017-02-15 10 views
0

Я создаю блог-сайт, на котором пользователи могут отправлять заметки, и я хочу ограничить их только возможностью редактировать сообщения в течение первых 3 дней после публикации, и у меня возникают проблемы с ним.Как ограничить, как долго пользователь может редактировать запись в Rails?

У меня есть следующий код в моем контроллере Примечания

class NotesController < ApplicationController 
before_filter :check_time!, only: [:edit, :update] 

def edit 
end 

def create 
end 

private 

def check_time! 
    if @note.created_at > @note.created_at + 3.hours 
    flash[:danger] = 'Out of 3 days' 
    redirect_to note_path(@note) 
    end 
end 
end 

У меня есть пост, который 1 день назад, а также для целей тестирования я использую часы вместо дней в check_time! в моем коде, чтобы узнать, работает ли он, однако это не так. По какой-то причине он работает, если я изменяюсь от> до <.

Я уверен, что я приложил created_at метку времени к моим записям, используя следующую миграцию:

class AddTimestampsToNote < ActiveRecord::Migration[5.0] 
def change_table 
add_column(:notes, :created_at, :datetime) 
add_column(:notes, :updated_at, :datetime) 
end 
end 

Я действительно не знаю, почему это не работает, так что любая помощь будет оценен

ответ

1

Ваш код имеет следующий: (! х> х + 3)

if @note.created_at > @note.created_at + 3.hours 

Это утверждение никогда не верно. Возможно, вы имели в виду:

Time.now > @note.created_at + 3.hours 
+0

Привет, спасибо! Это исправлено, я считаю, – Andrew

2

Используйте вместо этого специальную проверку.

class Note < ApplicationRecord 
    # ... 
    validate :is_editable, unless: :new_record? 

    private 
    def is_editable 
    if @note.created_at > 3.days.ago 
     errors[:created_at] = "can't be edited after 3 days." 
    end 
    end 
end 
+1

Я думаю, что у вас есть условие назад здесь, но в противном случае это определенно способ сделать это. – Glyoko

+0

Спасибо @Glyoko. Исправлено: – max

+0

Я пробовал это, но получаю следующую ошибку: undefined method 'validate 'для NotesController: Class – Andrew