我希望能够允许用户选择时间(即5小时),当他们创建帖子时,以及当时间过去时,帖子变得无法评论。因此,5小时后你就不能再评论那篇文章了。
我试图弄清楚这是否可能,如果是,我想知道我应该从哪里开始寻找,这是一件可以由宝石或Rails完成的事情吗?这样做?
答案 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>