質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

3794閲覧

acts-as-taggable-onで、個別のtagへリンクを貼る方法

mannnakakunn

総合スコア24

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2015/12/12 06:04

###前提・実現したいこと

Rails4でransackと、acts-as-taggable-onを使って、検索可能なデータベースサイトを作っています。
acts-as-taggable-onでタグ検索機能を実装したいのですがうまく動きません。

特定のmodelに対するeach do..endのループ内にて、タグリストへのリンクを取り出すことはできますが、
タグ個別のリンクを実装したいのです。

###発生している問題・エラーメッセージ

タグクラウド内では

タグ1=>タグ1の付加されたデータ一覧へのリンク

タグ2=>タグ2の付加されたデータ一覧へのリンク

といったリンク付はできています。

ただ、あるモデルに対してeach do ... end文を仕掛けて、
その中で取り出された各々個別のデータに付与されているタグを
表示させる機能を実現しようとすると上手くいきません。

具体的には、個別のデータに対してタグ1、タグ2と複数のタグが付けられている場合、
「タグ1かつタグ2」というtag_listへのリンクは作れるのですが、
「タグ1のみ」、「タグ2のみ」へのリンクが作れないのです。

それは、:teg_listという:nameを取得することはできる一方で、モデルと結びついた状態でタグクラウド内のように個別のtag.nameによる取得する方法がわからないからだと思うのですが…。

###ソースコード

#index.html.erb <% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %> <%= link_to tag.name, { :action => :tag, :name => tag.name }, :class => css_class %> <% end %>

このように記述すると、タグクラウド内での個別のタグへのリンクが作れます…。
しかし、以下のような部分の記述の場合、tag_cloudというヘルパー?で@tagsモデルを呼び出さない部分では、
:nameの指定をするときに、あるdogに付加されているtag_listという属性は呼び出せるのですが、個別にtag.nameのように呼び出すことができません。

<% @models.each do |dog| %> <% dog.tag_list.each do |tag| %> <%= link_to tag, { :action => :tag, :name => dog.tag_list } %> #ここを:tag_listのようにせず、@dogのtag.nameのように取得する方法が不明です。 <% end %> <% end %>

コントローラーは以下のように記述しています。

def index @search = Dog.search(params[:q]) @models = @search.result.paginate(:page => params[:page], :per_page => 8).order("popularity") @tags = Dog.tag_counts_on(:tags).order('count DESC') end

ご指導宜しくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)

rails 4.2

ruby 2.2.2

mySQL

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

githubを見ただけです。間違ってたらごめんなさい。
これで動いたりしませんか?

<% @models.each do |dog| %> <% dog.tags.each do |tag| %> <%= link_to tag, { :action => :tag, :name => tag.name } %> <% end %> <% end %>

投稿2015/12/12 12:34

jinco

総合スコア432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mannnakakunn

2015/12/12 13:38

jinco様 ありがとうございます!無事動作しました。 「tags」というものが使えるのですね。
jinco

2015/12/12 14:06

合ってましたか!よかったです。READMEを見るとtag_listはタグ名の文字列リストを返すようですが、tagsはTagモデルのリストを返すみたいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問