Rails 5:从控制器传递time_ago_in_words到视图时出错

时间:2018-11-08 03:18:51

标签: ruby-on-rails

我想防止用户删除X分钟以上的评论。 (这是由状态字段决定的。)我预计X的值将来可能会更改,因此目前已在初始化程序中定义:

AGE = 1.minute 

将错误消息从Comment控制器传递到(服务器生成的Javascript响应)视图的最佳方法是什么?

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 :(得分:1)

方法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