Reputation: 231
In my rails app I have a movies table, a movie has a release_date (date/month/year).
I also have a years table which will display all movies from a specific year If i create the year 2013, I would like to display all movies from the year 2013
In my years controller, in the :show action, I have this
@movies = Movie.where(:release_date => :ynumber)
But it doesn't show any movies from that year, even though there are movies with a release_date 2013.
I assume that it isnt showing because when I call :release_date, it is displaying (date/month/year). How can I have it display ONLY year
?
I've tried using .strftime("%Y")
and .strptime("%Y")
but these dont seem to work
PS: I am using SQLite3 in development mode and PostgreSQL in production mode
Years#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
Upvotes: 0
Views: 1165
Reputation: 1016
You also can use release_date .to_date.year to get the year, since you have an standard format (date/month/year).
So you can filter using this, similar to Rajarshi Das's suggestion:
@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]}
Upvotes: 1
Reputation: 7160
To find all movies by year try this:
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)
Upvotes: 3