0

在我的 Rails 应用程序中,我有一个电影表,一部电影有一个 release_date(日期/月/年)。

我还有一个年份表,它将显示特定年份的所有电影如果我创建 2013 年,我想显示 2013 年的所有电影

在我多年的控制器中,在 :show 动作中,我有这个

@movies = Movie.where(:release_date => :ynumber)

但它没有显示那一年的任何电影,即使有些电影的 release_date 是 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
4

2 回答 2

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)
于 2013-08-30T05:54:09.810 回答
1

您还可以使用 release_date .to_date.year来获取年份,因为您有标准格式(日期/月/年)。

因此,您可以使用它进行过滤,类似于 Rajarshi Das 的建议:

@movies = Movie.all.select{|mov| mov.release_date.to_date.year == params[:ynumber]}

或者

@movies = Movie.scoped.select{|mov| mov.release_date.to_date.year == params[:ynumber]}
于 2013-08-30T08:14:56.983 回答