2017-02-15 11 views
1

Я создал очень простой блог, где пользователи могут создавать, редактировать и удалять сообщения, но я хочу добавить функциональность, где пользователи могут редактировать только в течение ограниченного времени (например, 3 дня). Мое понимание Ruby недостаточно сильное, чтобы знать, как это сделать, чтобы любая помощь была оценена.Как иметь блог, где пользователи могут редактировать сообщения только в течение ограниченного времени в Ruby on Rails

Это мои примечания (мое имя для сообщений) контроллер

class NotesController < ApplicationController 
before_action :find_note, only: [:show, :edit, :update, :destroy] 


def index 
    @notes = Note.where(user_id: current_user) 
end 

def show 
end 

def new 
    @note = current_user.notes.build 
end 

def create 
    @note = current_user.notes.build(note_params) 

    if @note.save 
     redirect_to @note 
    else 
     render 'new' 
    end 
end 

def edit 

end 

def update 
    if @note.update(note_params) 
     redirect_to @note 
    else 
     render 'edit' 
    end 
end 

def destroy 
    @note.destroy 
    redirect_to notes_path 
end 

private 

def find_note 
    @note = Note.find(params[:id]) 
end 

def note_params 
    params.require(:note).permit(:title, :content) 
end 



end 

Я предполагаю, что где-то в методе редактирования мне нужно написать правило для ограничения возможности редактирования сообщения в только 3 дня, используя created_at функция как-то? Я просто не понимаю, как это сделать.

Любая помощь приветствуется.

ответ

1

Идеальное решение для этого является :before_filter

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

    def edit 
    end 

    def create 
    end 

    private 

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

Спасибо, это прекрасно :) – Andrew

+0

На самом деле я просто проверил это более глубоко, у меня есть примечание, которое 1 день назад и, если я изменю 3.days до 3 ., он все равно позволит мне редактировать. Вы знаете, почему это может не работать для меня? – Andrew

+0

Andrew Я могу предложить вам обернуть (@ note.created_at + 3.days) в brakets и проверить, но в любом случае наилучшей практикой является использование 'byebug' и посмотреть, как изменится значение –