2010-11-19 1 views
1

を助けます。...私は、ユーザーが自分のワークアウトを記録することができていたアプリケーションを作成しているnamed_scope

ユーザは自分のワークアウトのプライベートログまたはパブリックログを保持する能力を持ち、check_boxフィールドで表され、整数1をworkout.shareカラムに渡します。プライベートログは、私がcurrent_userをフィルタリングしてすべての出力を制限しているworkouts_controllerを通して見ることができます。

workouts_controller.rbは

@workouts = current_user.Workouts.all 

パブリックワークアウトは、別個community_controllerを通して示され、そこ私はこの

community_controller等トレーニング

@workouts = Workouts.all 

とを呼び出し、その後に結果をフィルタリングします次

とビュー

私は、これはこれを行うための好ましい方法ではなく、私の疑いは私が新しい変数 `@shared_workoutsを作成できるようにnamed_scopeをしたいということです伝えることができますベスト。それは私が名前付きスコープに慣れていないと言っていたので、何をどこに置いて正しい構文を書けるかについて助けを得ることができました。

+0

どのバージョンのRailsですか? –

答えて

1

あなたがレール2を使用している場合は、次のようにします。

class Workout < ActiveRecord::Base 
    named_scope :shared, :conditions => {:share => 1} 
end 

あなたがレール3を使用している場合は、代わりにこれを使用する:

class Workout < ActiveRecord::Base 
    scope :shared, where(:share => 1) 
end 

を次にコミュニティコントローラでは、あなたは、単に使用することができますピーターは、上記に言及したよう@workouts = Workouts.shared.all

1

は、あなたが使用Railsのバージョンに応じてnamed_scope /スコープを使用しています。また、テストのために値1を使用したくない場合もあります。 trueを使用する場合(つまり、マイグレーションでboolean型を使用した場合)あなたはそれが(SQLiteのは、例えばboolean型を持っている、MySQLは...小さなint型を使用しています)、異なる格納されていてもよいし、アクティブレコードはあなたのためにそれを管理するデータベースを変更した場合

理由があります。 :)

class Workout < ActiveRecord::Base 
    named_scope :shared, :conditions => {:share => true} 
end 

それとも

class Workout < ActiveRecord::Base 
    scope :shared, where(:share => true) 
end 

その後named_scopeにアクセスするには、 "Workouts.shared" を使用します。

関連する問題