2013-08-30 71 views
0

在我的Rails應用我有一個電影桌子,一部電影有上映時間(年/月/年)。Rails的控制器顯示只有

我也有幾年表將從特定年份 顯示所有的電影如果我創建了2013年,我想從年顯示所有的電影2013

在我多年控制在: show動作,我有這個

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

不過,這並不表明從當年的任何電影,即使有電影與上映時間2013年

我認爲它不是顯示,因爲當我打電話: release_date,它是d正在播放(日期/月/年)。我怎樣才能讓它只顯示year

我使用.strftime("%Y").strptime("%Y")嘗試,但這些不似乎工作

PS:我公司在生產模式中使用SQLite3的發展模式和PostgreSQL

年#顯示

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 
+1

的可能重複[ActiveRecord的查找年,日或月的日期字段(HTTP ://stackoverflow.com/questions/9624601/activerecord-find-by-year-day-or-month-on-a-date-field) – nemesv

回答

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) 
+0

但年在表心不是一列。 'SQLite3 :: SQLException:no such function:YEAR:SELECT「movies」。* FROM「movies」WHERE(YEAR(release_date)='2013') ' – PMP

+0

我不知道你使用SQLite3,我正在更新我的答案。 – zolter

+0

會和PostgreSQL的MySQL的選項工作,對不起,沒有指定的數據庫。我會編輯。 – PMP

1

您還可以使用RELEASE_DATE .to_date.year拿到一年,因爲你有一個標準格式(日/月/年)。

所以,你可以用這個,類似於Rajarshi達斯的建議進行過濾:

@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]}