在我的数据库中有一个名为“ startDate ”的列。存储的startDate的示例是 2000-01-01 12:01:01.000000 。 (此日期与Created_at或modified_at日期不同。它将是此视图中show.html.erb中提到的事件发生的日期。)
在文章的展示视图中,我想链接到结果(索引)页面,其中将显示类似的微博。我不知道该怎么做。
带链接的文字可能会说:
星期三之前或之后的10天内有17个事件 2009年10月17日。
“ 17个事件”一词将成为结果页面的链接。此特定示例中的搜索范围总共 20天, 10天 在2009年10月17日星期三之前,以及 后10天。
这是我目前的show.html.erb页面。
<div class="row">
<div class="span2"><center><img src=<%= @micropost.imageURL %> class="img-polaroid"></center></div>
<div class="span7">
<h3><%= @micropost.title %></h3><br>
<p><small><%= @micropost.loc1T %><br>
<%= @micropost.startTime.strftime('%A, %B %d, %Y') %></small></p>
<p><%= raw @micropost.content %></p>
</div>
<div class="span3"><img src="http://placehold.it/210x210" class="img-polaroid"><br>
<small>advertisment</small>
<div class="divider"> </div>
<div class="well">
<p>There are <%= link_to(pluralize("event", @microposts.count), "#{microposts_path} related=#{@micropost.id}") %> within 10 days...</p>
</div>
</div>
</div>
模型/ micropost.rb
class Micropost < ActiveRecord::Base
attr_accessible :content, :title,:keyword,:privacy,:groups,:loc1T,:latitude,:longitude,:loc2T,:loc2Lat,:loc2Lon,:startTime,:endTime,:imageURL
geocoded_by :loc1T
after_validation :geocode#, :if => :address_changed?
belongs_to :user
validates :user_id, presence: true
validates :title, presence: true
validates :keyword, presence: true
validates :privacy, presence: true
validates :groups, presence: true
validates :loc1T, presence: true
validates :latitude, presence: true
validates :longitude, presence: true
validates :loc2T, presence: true
validates :loc2Lat, presence: true
validates :loc2Lon, presence: true
validates :startTime, presence: true
validates :endTime, presence: true
validates :imageURL, presence: true
validates :content, presence: true
default_scope order: 'microposts.created_at DESC'
def self.from_users_followed_by(user)
followed_user_ids = "SELECT followed_id FROM relationships
WHERE follower_id = :user_id"
where("user_id IN (#{followed_user_ids}) OR user_id = :user_id",
user_id: user.id)
end
def related_microposts(this_startTime)
@microposts.where('startTime > ? AND startTime < ?', 5.days.since(startTime), 5.days.until(startTime))
end
end
microposts_controller.rb
class MicropostsController < ApplicationController
before_filter :signed_in_user, only: [:create, :destroy]
before_filter :correct_user, only: :destroy
def index
end
def show
@micropost = Micropost.find(params[:id])
end
def related_microposts(this_startDdate)
Micropost.where('startDate > ? AND startDate < ?', 5.days.since(this_startDate), 5.days.until(this_startDate))
end
def create
@micropost = current_user.microposts.build(params[:micropost])
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
def destroy
@micropost.destroy
redirect_to root_url
end
private
def correct_user
@micropost = current_user.microposts.find_by_id(params[:id])
redirect_to root_url if @micropost.nil?
end
end
这是数据库列的截图...
答案 0 :(得分:0)
听起来有几个问题需要解决。
(遵循Rails惯例,我假设你的列真的被称为start_date
: - ))
首先,要获取start_date
在文章的5天内的文章列表,您可以使用类似
def related_articles(this_start_date)
Article.where('start_date > ? AND start_date < ?', 5.days.since(this_start_date), 5.days.until(this_start_date))
end
我可能有时间函数错误,但check here for details。
现在related_articles
已满足您的需求。如果您只需要计数,则可以使用related_articles.count
获取,或者保存到@articles
。在显示当前@article
的主页面中添加一个链接以显示相关文章,例如
There are <%= link_to(pluralize("event", @articles.count), "#{articles_path}?related=#{@article.id}") %> within 10 days...
articles_path
是列出所有文章的index
视图的路径,因此现在在控制器的index
方法中放入一些代码,以便在特殊查询字符串参数为当下。
if params[:related]
this_article = Article.find params[:related] # 123 is the id of the main article
@articles = Article.related_articles(this_article)
else
@articles = Article.all
end
一种无序的答案,但我认为它得到了主要观点: - )