Rails 5: ошибка при передаче time_ago_in_words от контроллера для просмотра - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу запретить пользователям удалять комментарии, возраст которых превышает X минут. (Это определяется полем состояния.) Я предполагаю, что значение X может измениться в будущем, поэтому в настоящее время оно определено в инициализаторе:

AGE = 1.minute 

Как лучше всего передать сообщение об ошибке от контроллера комментариев в представление (генерируемый сервером Javascript Response)?

if @comment.status == "locked"
  render "comments/too-old", locals: {message: "You can't delete this comment now as it's more than #{time_ago_in_words(AGE.ago)} old."}
end

В настоящее время это не удается, поскольку нам не разрешено использовать time_ago_in_words в контроллере:

неопределенный метод `time_ago_in_words '

1 Ответ

0 голосов
/ 08 ноября 2018

Метод time_ago_in_words из ActionView::Helpers::DateHelper помощника, который будет автоматически включен в представления.

Если вам нужен доступ к этому методу из контроллера, вам нужно включить этот помощник в контроллер.

Предполагается, что имя контроллера CommentsController и имя действия как destroy :

include ActionView::Helpers::DateHelper

class CommentsController < ApplicationController
  def destroy
    ...
    if @comment.status == "locked"
      render "comments/too-old", locals: {message: "You can't delete this comment now as it's more than #{time_ago_in_words(AGE.ago)} old."}
    end
    ...
  end   
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...