継承されたリソースとモンゴイド
-
27-10-2019 - |
質問
誰もがレール3を持っていることに成功しましたか? マンゴイド と 継承されたリソース 働く?それを実現するためのヒントはありますか?私は両方の宝石を使いたいです。
現在、私は遭遇しています:
undefined method `scoped'
インデックスアクションについて。
ありがとう!
ところで、スコープされた問題の回避策は、次のようなコレクションをオーバーライドすることです。
class CampaignsController < InheritedResources::Base
def collection
@campaigns ||= end_of_association_chain.paginate(:page => params[:page])
end
end
しかし、私はもっと全体的なアプローチを探しています
解決
Mongoidのみを使用している場合、すべきことは、継承されたリソースのデフォルトの収集動作を上書きすることです。デフォルトの動作はこれです:
とはいえ、以下はトリックを行う必要があります。
module MongoidActions
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
InheritedResources::Base.send :include, MongoidActions
コレクションをデフォルトでパジネートし、すべてのページで無料でページネーションを行うこともできます。
他のヒント
または、マンゴイドにパッチを当てることができます:
module MongoidScoped
def scoped
all
end
end
Mongoid::Finders.send :include, MongoidScoped
これは作ります inherit_resources
メソッドは予想どおりに機能します。
これが私が継承の両方をカバーするためにしたことです InheritedResources::Base
そして使用します inherit_resources
声明。
module InheritedResources
module BaseHelpers
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
end
あなたは通常、これを初期イザーに入れます(私は使用します config/initializers/mongoid.rb
).
作る Mongoid 2.0.0.beta.20
と inherited_resources 1.2.1
フレンドリー。
非常に役立つ投稿!
コントローラーをからサブクラス化できない場合は、これをどのように行いますか InheritedResource::Base
むしろ、クラスメソッドを使用する必要があります inherit_resources
, 、 そのようです :
class MyController < AlreadyInheritedFromController
inherit_resources
end
上記のモンキーパッチは、このセットアップでは機能しないようです。
鍵はそうかもしれないようです InheritedResources::Base.inherit_resources
しかし、この方法を上書きする正しい方法については不明です。ここで間違った道を歩んでいる場合は修正してください。