1

最初の 3 つの項目を残りの項目とは少し異なる方法で扱う必要があるため、これら 2 つのリストはわずかに異なるだけです。これが現在機能していない唯一の理由は、正規表現を含む変数が 2 回呼び出されるためです。このようにすべてを繰り返さなくても、最初の 3 つの項目 (最初の %li に示されている) を残りの項目から分離する方法はありますか?

%ul.list_container

  - @links.sort_by { |link| link.votes.where(:up => true).count - link.votes.where(:up => false).count }.reverse.first(3).each do |link|

  %li
    .various_containers
    %p
      = link_to link.title, "http://youtube.com/embed/#{link.url.to_s.match(/\/\/youtu.be\/(\S+)$/)[1]}/?rel=0", :class => "youtube title_link"
    = link.url_html


  - @links.sort_by { |link| link.votes.where(:up => true).count - link.votes.where(:up => false).count }.reverse.drop(3).each do |link|

  %li{:style => 'margin-bottom: 50px;'}
    .various_containers
    %p
    = link_to link.title,"http://youtube.com/embed/#{link.url.to_s.match(/\/\/youtu.be\/(\S+)$/)[1]}/?rel=0", :class => "youtube title_link" 
4

2 に答える 2

1

いくつかのこと。属していないビューに、ActiveRecord ルックアップを含む多くのコードがあります。ビューに@links到達するまでに、反復したい単純なコレクションにすでに変換されているはずです。

したがって、ビューは次のようになります。

-@prepared_links.each do |link, url_html|
  %p
    =link_to link.title, link.embedded_url, :class => "youtube title_link"
    =url_html

これは、いくつかの追加のメソッドが必要であることを意味embedded_urlします: Link モデルに入れることができ、基本的に"http://youtube.com/embed/.../?rel=0"は現在持っている文字列だけにすることができますlink_to

最初の 3 つの表示url_htmlについては、コントローラーで次のようにしてみてください。

def my_method
  @prepared_links = Link.sorted_by_vote_count # you'll have to add this method as well
  url_htmls = @prepared_links[0..2].map(&:url_html)
  @prepared_links = @prepared_links.zip(url_htmls)
end

これにより、ペアの値として準備されたリンクの配列が得られます。最初の 3 つが になり[some_link, url_html]、最初の 3 つ以降がすべて になり、実際に存在しない限り[some_link, nil]何も表示されません。url_html

于 2012-11-15T20:21:16.973 に答える
0

each_with_index メソッドを使用して、インデックス値に応じて各ループをカスタマイズできます。

%ul.list_container
  - @links.sort_by { |link| link.votes.where(:up => true).count - link.votes.where(:up => false).count }.reverse.each_with_index do |link, index|
  %li{ :style => "#{index < 3 ? 'margin-bottom: 50px;' : ''}" }
    .various_containers
    %p= link_to link.title, "http://youtube.com/embed/#{link.url.to_s.match(/\/\/youtu.be\/(\S+)$/)[1]}/?rel=0", :class => "youtube title_link"
    - if index < 3
      = link.url_html
于 2012-11-15T20:17:52.520 に答える