如何显示最新发布?

时间:2013-07-29 00:21:50

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

所以,我有一个应用程序,允许用户上传歌曲并投票。投票数量较多的歌曲最终排在最前面,新发布的歌曲需要投票才能看到(想想黑客新闻)。

我还有一个'新歌'页面,我想首先显示新上传的歌曲否定投票(唉hackernews)

我当前的song_controller对索引中的歌曲进行排序:

def index
    @songs = Song.order('plusminus')
  end

我在song_controller中有一个def new_songs动作,但我不知道如何让它只显示新歌并绕过thumbs up gem投票。

2 个答案:

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