我正在使用cancancan
和will_paginate
。某些用户可以阅读由以下块定义的某些报告。
Ability.rb
can :read, Report do |report|
if report.is_pro?
if (8..12).include? Time.now.month
(report.created_at.year != Time.now.year) || (report.author_id == user.id)
elsif (1..4).include? Time.now.month
(report.created_at.year < Time.now.year-1) || (report.author_id == user.id)
else
true
end
end
end
但是,当在给定页面上使用分页链接时,如下所示,限制有效,用户只能看到能够的报告,但是,will_paginate链接显示为好像所有报告都可见。
users_controller.html.erb
@reports = Report.all.paginate(page: params[:page], per_page: 15)
report_activity.html.erb
<% @reports.each do |report| %>
<% if can? :read, report %>
<% render 'user_report', report: report %>
<% end %>
<% end %>
<%= will_paginate @reports %>
我找到了一个在我的ActiveQuery中使用方法accessible_by(current_ability)
提到的链接。但这意味着我需要将上面显示的Cancancan
Ability块重写为哈希值。我不知道如何将我当前的逻辑作为哈希。
答案 0 :(得分:0)
所以我最终做的是以下内容。希望这有助于其他人,但基本上只是重新思考应该如何设置我相信......
<div class="section fp-auto-height" data-menuanchor="thirdPage">
<div class="slide">
<div id="main" class="mainupp">
<div id="myheader" class="border"></div>
<div class="container-fluid height-full">
<div class="row">
<div id="head-text">
<div class="col-sm-5"></div>
<div class="col-sm-2">
<h2>sdfsdfsdf</h2>
</div>
<div class="col-sm-5"></div>
</div>
</div>
<div class="row">
<div id="mid-text" class="dark-text">
<div class="col-sm-5"></div>
<div class="col-sm-3">
<p>asd asd asd as das dasdas d asd as d asd as d asd as d asd as da sd asdasdasdasd as d asdas das d asdasdasd asdas da sd asd as da sd asd as d as asdasdasdasdasd</p>
</div>
<div class="col-sm-4"></div>
</div>
</div>
</div>
<div id="meny" class="menyupp"></div>
</div>
</div>