2011-12-08 8 views
0
  1. 私はテーブル(投稿)に 'tag'という列があります。特定のタグ付き投稿(スポーツ、芸術&エンターテインメントなど)を呼び出せますユーザーが対応するリンクをクリックすると、そのカテゴリからの投稿のみが取得されます。ここで

は、私がこれまでに実施することを試みたものである:(私の記事モデルに)Ruby on Railsでモデルを操作する

def self.seperate_by_tag 
    @tag = find(:all, :tag => ??) 
end 

私はに私が入力する必要があるパラメータのいくつかの並べ替えを想定しています:するために、タグ部分特定のタグを持つ一連の投稿にアクセスすることはできますが、どうやってそのようにするかはわかりません。

  1. 投稿された順番で投稿を表示する際に問題が発生しています(私はそれらをトップにしたい)。

    def self.find_posts 
        find(:all, :order => ??) 
    end 
    

任意の助けもいただければ幸いです!あなたのtag列が単なるテキストであれば、それはこのような単純なものでしょう

答えて

2

class Post < ActiveRecord::Base 
    scope :by_tag, lambda {|tag_name| where :tag => tag_name } 
end 

# Usage: 
Post.by_tag('Sports').all # => collection of posts 

scopethis Rails Guideに覆われて使用します。あなたの他の質問については


、限り、あなたのposts表はtimestamps migration helperを提供created_at列を(持っているとして、あなたはそうのような)逆年代順(最新の最初にそれらを注文することができます:

Post.order('created_at DESC').all 

orderthis guideで覆われている。


PSあなたがから集めてきたかもしれませんが私のコードでは、SomeModel.find :all, ...の構文は正式に推奨されていません。代わりにSomeModel.allSomeModel.firstなどを使用する必要があります。

+0

メソッドにスコープ部分をラップできますか?私はそれを私の見解で利用できるようにコントローラから呼び出す方法をどうやって行うのですか? – TopChef

+0

'scope'はメソッドを作成します(' Post.by_tag'、あなたが望むものは何でも構いませんが)。私はあなたが他の方法でそれをラップすることによって得られる利益を見ません。 'Post.find'や' @ some_user.posts.where(...)。first'のように、上記のようにコントローラーから呼び出すことができます( '#Usage:'の下)。 - この場合、@ some_user.posts.by_tag( 'スポーツ')... '。 –

関連する問題