所以,我有一个应用程序,允许用户上传歌曲并投票。投票数量较多的歌曲最终排在最前面,新发布的歌曲需要投票才能看到(想想黑客新闻)。
我还有一个'新歌'页面,我想首先显示新上传的歌曲否定投票(唉hackernews)
我当前的song_controller对索引中的歌曲进行排序:
def index
@songs = Song.order('plusminus')
end
我在song_controller中有一个def new_songs动作,但我不知道如何让它只显示新歌并绕过thumbs up gem投票。
答案 0 :(得分:0)
我对这个宝石知之甚少,但它似乎是以范围为基础的。如何正常查询数据呢?
def new_songs
@songs = Song.order "id DESC"
end
或更好,编写自己的范围:
# song.rb
scope :newest, order("id DESC")
# song_controller.rb
def new_songs
@songs = Song.newest
end
答案 1 :(得分:0)
将包含最近上传的歌曲的实例变量从您的控制器操作传递到视图:
# app/controllers/songs_controller.rb
def index
@songs = Song.order('plusminus')
@newest_songs = Song.order('created_at DESC').limit(10) # returns the ten most recently uploaded songs
end
在视图中,您可以通过@newest_songs
实例变量访问十种最新的歌曲:
# app/views/songs/index.html.erb
<h1>Highest Voted Songs</h1>
<% @songs.each do |song| %>
# view logic
<% end %>
<h1>Newest Songs</h1>
<% @newest_songs.each do |song| %>
# view logic
<% end %>
或者,如果您想通过完全独立的视图显示最新歌曲,您可以执行类似以下操作:
# app/controllers/songs_controller.rb
def new_songs
@songs = Song.order('created_at DESC')
end
# app/views/songs/new_songs.html.erb
<h1>Newest Songs</h1>
<% @newest_songs.each do |song| %>
# view logic
<% end %>
# config/routes.rb
resources :songs do
collection do
get 'new_songs' # creates route from `songs/new_songs` to the `songs#new_songs` controller action
end
end