1

所以,我有一个应用程序,允许用户上传歌曲并投票。投票数较高的歌曲最终排在首位,新发布的歌曲需要投票才能看到(想想hackernews)。

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

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

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

我在 song_controller 中有一个 def new_songs 动作,但我不确定如何让它只显示新歌曲并绕过竖起大拇指的 gem投票。

4

2 回答 2

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 
于 2013-07-29T00:48:23.750 回答
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
于 2013-07-29T00:36:33.070 回答