在我的rails应用程序中,我有一个电影表,一部电影有一个release_date(日期/月/年)。
我还有一张桌子,可以显示特定年份的所有电影 如果我创建2013年,我想展示2013年的所有电影
在我的岁月控制器中,在:show action中,我有这个
@movies = Movie.where(:release_date => :ynumber)
但它没有显示那一年的任何电影,即使有一部电影的发布日期为2013年。
我认为它没有显示,因为当我调用:release_date时,它显示(日期/月/年)。如何才能显示year
?
我尝试使用.strftime("%Y")
和.strptime("%Y")
,但这些似乎无法正常使用
PS:我在开发模式下使用SQLite3,在生产模式下使用PostgreSQL
年#show
def show
@year = Year.find(params[:id])
#those i've tried seperately which havent worked
@movies = Movie.where("extract(year from release_date) = ?", ynumber)
@movies = Movie.where("extract(year from release_date) = ?", :ynumber)
@movies = Movie.where("extract(year from release_date) = ?", 'ynumber')
@movies = Movie.where("extract(year from release_date) = ?", ':ynumber')
@movies = Movie.where("extract(year from release_date) = ?", params[:ynumber])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @year }
end
end
答案 0 :(得分:3)
要按年查找所有电影,请尝试以下操作:
1)MySQL:
@movies = Movie.where("YEAR(release_date) = ?", 2013)
2)SQLite3:
@movies = Movie.where("strftime('%Y', release_date) = ?", 2013)
3)PostgreSQL:
@movies = Movie.where("extract(year from release_date) = ?", 2013)
答案 1 :(得分:1)
您还可以使用release_date .to_date.year 来获取年份,因为您有标准格式(日期/月/年)。
所以你可以使用这个来过滤,类似于Rajarshi Das的建议:
@movies = Movie.all.select{|mov| mov.release_date.to_date.year == params[:ynumber]}
OR
@movies = Movie.scoped.select{|mov| mov.release_date.to_date.year == params[:ynumber]}