红宝石轨道 - 如何存储和仅显示当前用户看到的最后 5 条新闻



我有一个应用程序,它有几个部分,如新闻、帖子、工作、事件等。所有这些都通过有效的注册/登录系统完成。

新闻部分显示所有可供查看的新闻,并有一个小div显示最近的活动

最近的活动div 应该只显示当前用户在该会话中看到的最后 5 条新闻。

我设法显示了当前用户看到的最后 5 个 URL,但我想将其限制为仅新闻控制器。

class ApplicationController < ActionController::Base
   before_filter :store_recent_news
private
  def store_recent_news
    session[:recents] ||= []
    session[:recents].delete_at(0) if session[:recents].size >= 5
    session[:recents] << request.url
  end

在最近的活动div 中,我只会显示最后 5 条新闻现在我显示一个这样的列表:

-本地主机:3000/新闻/17

-本地主机:3000/新闻

-本地主机:3000/工作/29

-本地主机:3000/个

-本地主机:3000/目录

我只想显示当前用户看到的最后新闻的链接,例如

链接到新闻2

新闻链接5

链接到新闻3

我希望我能清楚地知道问题是什么以及我想做什么。

好的,我设法获得了当前用户访问的最后 5 条新闻的 ID

 before_filter :recently_viewed, only: [:show, :index]

      def recently_viewed
        (session[:Directory_id] ||= []) << params[:id]
        session[:Directory_id].delete_at(0) if session[:Directory_id].size >= 10
      end

现在我设法显示当前用户在会话中访问过的新闻的最后 5 个 ID,但我需要将新闻的名称显示为链接。 有什么想法吗?

您应该在新闻模型中创建一个范围:
http://guides.rubyonrails.org/active_record_querying.html#scopes

scope :recent_news, order("created_at desc").limit(5)

然后,在您的news_controller中,无论您需要执行什么操作,您都可以访问此自定义查询:

def index
  # whatever
  @recent_news = News.recent_news
end

然后,您可以在相应的视图中使用实例变量。

  before_filter :recently_viewed_contacts
  def recently_viewed_contacts
    session[:New_id] ||= []
    session[:New_id] << params[:id] unless params[:id].nil?
    session[:New_id].delete_at(0) if session[:News_id].size >= 4
  end

所以我弄清楚了如何使用相同的数组方法来做到这一点,只需更改参数以仅检查新闻匹配的 id,并通过刷新或检查与新闻不同的其他视图对 nil 进行一些更正。

  def index
    @recent_news = session[:News_id]
    @news = User.approved.order(:name).page(params[:page]).per(8)
  end

并使用新数组显示用户最近访问的 5 条新闻的标题

        <% @recent_news.each do |recent| %>
          <p><%= New.find(recent).title %></p>
        <% end %>

最新更新