将注释限制在Ruby on Rails中的特定时间段

时间:2015-08-05 21:27:20

标签: ruby-on-rails ruby ruby-on-rails-4

我希望能够允许用户选择时间(即5小时),当他们创建帖子时,以及当时间过去时,帖子变得无法评论。因此,5小时后你就不能再评论那篇文章了。

我试图弄清楚这是否可能,如果是,我想知道我应该从哪里开始寻找,这是一件可以由宝石或Rails完成的事情吗?这样做?

3 个答案:

答案 0 :(得分:3)

定义帖子应该可评论多长时间:

# in your model/post.rb
COMMENTABLE_TIME_PERIOD = 5.hours

def commentable?
  Time.current < created_at + COMMENTABLE_TIME_PERIOD
end

当帖子不再可评论时,在您的视图中添加内容以隐藏评论表单:

<% unless post.commentable? %>
  your form
<% end %>

添加自定义验证程序,以确保在此期间后无法创建评论:

# in your model/comment.rb
validates :post_commentable

private
def post_commentable
  unless post.commentable?
    errors.add(:base, "You cannot comment on old posts")
  end
end

答案 1 :(得分:2)

在Post模型中创建commentable_until日期时间属性。

在保存注释的控制器中,运行检查以查看是否已经过了该时间。如果有,请不要保存评论并相应地重定向。

您也可以在视图中执行此操作,以防止出现“添加评论”选项。

答案 2 :(得分:1)

希望这将是代码风格。请根据您的申请书写。

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.3/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.2/ui-bootstrap.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.13.2/ui-bootstrap-tpls.js"></script>
<div ng-app="demoApp" ng-controller="mainController">
    <accordion close-others="oneAtATime">
    <accordion-group is-open="destination.openState" ng-repeat="destination in mileage.destionations" is-disabled="false">
        <accordion-heading>
            <span class="accordionSubtitle">toggle me </span> - {{destination.total}} this text is not clickable<i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': status.open, 'glyphicon-chevron-right': !status.open}"></i>
        </accordion-heading>
      {{destination|json}}
    </accordion-group>
  </accordion>
    <button ng-click="addNewDestination()">add</button>
</div>