Rails控制器仅显示年份

时间:2013-08-30 05:50:43

标签: ruby-on-rails datetime controller

在我的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

2 个答案:

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