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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

1回答

1102閲覧

多対多の関連テーブルを作成しタグを実装したが絞り込み機能が効かない

ayachika

総合スコア36

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2018/12/24 03:19

編集2022/01/12 10:55

現在rubyonrailsにてSNSサイトを作成しているものです。

##参考にしたサイト
最初、タグ付け機能はこちらRubyOnRailsで投稿アプリを作ろう②(画面作成編)のサイトを参考に作成しました。このとおりに関連テーブルを作成したところ、タグは表示されるのですが、タグ情報が保存されていないのか、絞り込みをしてもすべてのpostが表示されます。DBも作成済でデータも保存されているのであれば、なぜこうなるのか、解決方法がわかりません。

イメージ説明
タグを選択した際、このようにURLが表示されますが、投稿一覧画面は変化なしでした。

##外部キーを追加してみましたが変わらず・・・
そこで、こちらRuby on Rails で多対多のモデルを構築した場合にハマったエラーを参考に外部キーを追加するなどして、エラー解除に取り組んでいるのですが、やはり変わらず、絞り込み表示機能が作用しません。

どなたかお力をお貸しいただける方、ご回答いただければ幸いです。

##環境
AWSのcloud9を使用しています。
rubyのバージョンは 2.4.1p111
railsのバージョンはRails 5.0.7 です。

##関連コード

post.rb

rb

1class Post < ApplicationRecord 2has_many :post_tag_relations, dependent: :delete_all, foreign_key: 'post_id' 3has_many :tags, through: :post_tag_relations 4end 5

tag.rb

rb

1class Tag < ApplicationRecord 2 has_many :post_tag_relations, dependent: :delete_all, foreign_key: 'tag_id' 3 has_many :posts, through: :post_tag_relations 4end 5

_form.html.erb

rb

1<div class="form-group"> 2 <span>タグ</span> 3 <%= f.collection_check_boxes(:tag_ids, Tag.all, :id, :name) do |tag| %> 4 <div class="form-check"> 5 <%= tag.label class: 'form-check-label' do %> 6 <%= tag.check_box class: 'form-check-input' %> 7 <%= tag.text %> 8 <% end %> 9 </div> 10 <% end %> 11</div>

posts_controller.rb
タグを保存されるように修正済。

rb

1def index 2 @posts = params[:tag_id].present? ? Tag.find(params[:tag_id]).posts : Post.all 3 @posts = Post.page(params[:page]) 4end 5 6 7def post_params 8 params.require(:post).permit(:title, :content, :picture, tag_ids: []) 9end

マイグレーションファイル(create_tags.rb)

rb

1class CreateTags < ActiveRecord::Migration[5.0] 2 def change 3 create_table :tags do |t| 4 t.string :name, null:false #nullを禁止 5 6 t.timestamps 7 end 8 end 9end

マイグレーションファイル(create_post_tag_relations.rb)

rb

1class CreatePostTagRelations < ActiveRecord::Migration[5.0] 2 def change 3 create_table :post_tag_relations do |t| 4 t.references :post, foreign_key: true 5 t.references :tag, foreign_key: true 6 7 t.timestamps 8 end 9 end 10end

ビュー(絞り込み機能の部分のみ抜粋)

rb

1<div class="ml-auto posts_button"> 2 <%= form_tag posts_path, method: :get, class: 'posts__searchForm' do %> 3 <%= select_tag :tag_id, 4 options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]), 5 { 6 prompt: 'タグで絞り込み', 7 class: 'form-control posts__select', 8 onchange: 'submit(this.form);' 9 } 10 %> 11 <% end %> 12

記述が不足している点がありましたら、コメント欄にてご指摘ください。

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

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

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

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

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

guest

回答1

0

肝心の絞り込み機能( posts_controller.rbindex 関数やそのView)が記載されていないので、誰も原因を指摘できないと思います...

投稿2018/12/26 02:20

Ighrs

総合スコア656

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

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

ayachika

2018/12/26 14:01

ご指摘ありがとうございました。追加しました。至らないところが多々あり、申し訳ありません。もしお気づきの点がございましたらご指導いただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問