在Rails中,使用Cancancan / Will_Paginate,我如何才能显示用户可以阅读的导航链接?

时间:2016-03-17 22:17:56

标签: ruby-on-rails will-paginate cancancan

我正在使用cancancanwill_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块重写为哈希值。我不知道如何将我当前的逻辑作为哈希。

1 个答案:

答案 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>