我有一个应用程序,其中有几个部分,如新闻,帖子,工作,活动等。所有这些都有一个工作注册/登录系统。
“新闻”部分显示所有可查看的新闻,并显示一个显示最近活动的div
RECENT ACTIVITY div应该只显示当前用户在该会话中看到的最后5条新闻。
我设法显示当前用户看到的最后5个网址,但我想将其限制为仅限新闻控制器。
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
在最近的活动中,我只会显示最近的5条新闻 现在我显示一个这样的列表:
-localhost:3000 /消息/ 17
-localhost:3000 /消息
-localhost:3000 /作业/ 29
-localhost:3000 /作业
-localhost:3000 /目录
我想只显示当前用户看到的上一条新闻的链接,例如
链接到news2
链接到news5
链接到news3
我希望我能清楚地知道问题是什么以及我想做什么。
好吧,我设法获得当前用户访问的最近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,但我需要将新闻的名称显示为链接。任何想法?
答案 0 :(得分:1)
您应该在新闻模型中创建范围:
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
然后你可以在对应的视图中使用实例变量。
答案 1 :(得分:0)
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 %>