11

http://ccvideofinder.heroku.com/にアクセスすると、私が言及していることの良い例になります。

Railsでこれを行うにはどうすればよいですか? case/ステートメントを使用することを考えてwhenいましたが、しばらくの間 IRB をいじった後、それを理解できませんでした。


モデルでは:

class Movies < ActiveRecord::Base
  validates_presence_of :title

  def self.find_by_first_letter(letter)
    find(:all, :conditions => ['title LIKE ?', "#{letter}%"], :order => 'title ASC')
  end

end

コントローラーで:

@result = Movie.find_by_first_letter(params[:letter])
4

2 に答える 2

21
# Simple Ordering    
@videos = Movie.order('title ASC')

# Implement the ordering outside of definition
@videos = Movie.find_by_first_letter('a').order('title ASC')

# Implement the order into your definition (as in example below)
@videos = Movie.find_by_first_letter('a')

ActiveRecord Querying のドキュメントは、http: //guides.rubyonrails.org/active_record_querying.html#orderingにあります。


順序を定義に実装したい場合は、関数を次のようにfind_by_first_letterチェーンするだけです。.order()

class Movie < ActiveRecord::Base
  validates_presence_of :title

  def self.find_by_first_letter(letter)
    where('title LIKE ?', "#{letter}%").order('title ASC')
  end
end
于 2013-11-05T01:04:51.307 に答える
3

クエリチェーンを使用しない理由がわかりません:

Movie.where('title LIKE ?', "a%").order(:title)

しかし、Michael Lynch が言ったようにスコープを作成すると、コードの再利用性が向上します。

実際、あなたのコードは非推奨の警告を出しています。Rails サーバーのターミナル ウィンドウで確認する必要があります。機能していますが、それをチェックしないでおくのは得策ではありません。

非推奨警告: #find(:all) の呼び出しは非推奨です。代わりに #all を直接呼び出してください。ファインダ オプションも使用しました。これらも非推奨です。ファインダー オプションを使用する代わりに、スコープを構築してください。((irb):1 の irb_binding から呼び出されます)

于 2013-11-05T01:43:22.167 に答える