2017-12-13 48 views
0

My Railアプリケーションには、多数のユーザーを含む機関レベルのアカウントがあります。ActsAsTaggableOn:has_many関係の子オブジェクトのすべてのタグを取得

各機関には多くのプロジェクトがあります。

プロジェクトacts_as_taggableと施設のユーザーは、施設のプロジェクトにタグを追加できます。

特定の機関に属するプロジェクトのすべてのタグのリストを照会したいと思います。

例えば、(存在しない)Project.where(institution_id: 1).tagsのようなもの

私はこれを容易にするために、タグの所有者として、プロジェクトの機関を設定し、所有者が照会する必要がありますか?

class Institution < ActiveRecord::Base 
    acts_as_tagger 
end 

class Project < ActiveRecord::Base 
    acts_as_taggable 
end 

次に設定タグ:

@current_user.institution.tag(@some_project, with: 'tag1, tag2') 

...とタグの取得:

@current_user.institution.owned_tags 

または、所有権を設定する必要はありませんアプローチはありますか? (それは私のデータで動作します、が)構文はいくつかの調整を必要とするかもしれないこと

ActsAsTaggableOn::Tag. 
    joins(:taggings). 
    where(taggings: {taggable: current_institution.projects}) 

+0

これをソートすることになりましたか? – jvillian

答えて

1

確かに、のような何かをします。

私は、あなたがcurrent_institution.projectsで振ったことがあるような施設に所属するプロジェクトを得るための何らかの方法があると仮定しています。自分のコードに適切なものを置き換えます。

いずれにしても、正しい方向に向かうべきだと思います。

+0

ありがとう!そのテンプレートは私を答えにまっすぐに導いた。 ** ActsAsTaggableOn **では、以下のように動作しました: 'ActsAsTaggableOn :: Tag.joins(:taggings).where(taggings:{taggable_id:current_institution.projects})'私はact_as_taggable **の他のモデルを持っています。 ** ActsAsTaggableOn :: Tag.joins(:taggings).where(taggings:{taggable_id:current_institution.projects、taggable_type::Project}) ' – noob

+0

申し訳ありませんが、私は' ActsAsTaggable'を間違って入力しました。 'ActsAsTaggableOn'の代わりに。私が言ったように試してみましたか?私は、 'taggable:current_institution.projects'(' taggable_id'ではなく)をプロジェクトに対して特別にスコープし、 'taggable_type:'ステートメントを保存すると思っていたと思います。 – jvillian

+0

うん、私はそれを 'taggable:... 'と試してみましたが、十分スマートではありませんでした。列が存在しないと訴えた。 – noob

関連する問題