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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

938閲覧

gem'ransack' 及び 'search_form_for'を使って検索フォームを作成したい。

learner_takashi

総合スコア21

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/08/06 15:43

編集2019/08/06 15:46

タイトル通りなのですがgem'ransack'なおかつsearch_form_forを使って検索フォームを作成したいです。

現状といたしましては、
index.html.erb

ruby

1<%= search_form_for @q, url: users_path do |f| %> 2 <%= f.label :name, "#{t('view.task_name_search')}" %> 3 <%= f.search_field :name_cont, id: 'search_field_name' %> 4 <%= f.label :state, "#{t('view.task_state_search')}" %> 5 <%= f.select :state_eq, ['未着手','着手中','完了'], include_blank: "指定無し" %> 6 <%= f.submit "#{t('view.search')}" %> 7<% end %> 8 9<!--<div class="cotainer">--> 10<table class="table"> 11 <thead> 12 <tr> 13 <th>duty</th> 14 <th>Details</th> 15 <th>expired_at</th> 16 <th>state</th> 17 <th>priority</th> 18 <th>labels</th> 19 <!-- <th colspan="5"></th>--> 20 </tr> 21 </thead> 22 <tbody> 23 <% @users.each do |blog| %> 24 <tr> 25 <td><%= blog.name %></td> 26 <td><%= blog.details %></td> 27 <td><%= l blog.expired_at, format: :short %></td> 28 <td><%= blog.state %></td> 29 <td><%= blog.priority %></td> 30 <% blog.labelings.each do |labeling| %> 31 <td><%= labeling.label.label_name %></td> 32 <% end %> 33 <td><%= link_to "#{t('view.show')}", blog, class: "btn btn-primary" %></td> 34 <td><%= link_to "#{t('view.edit')}", edit_blog_path(blog),class: "btn btn-success" %></td> 35 <td><%= link_to "#{t('view.destory')}", blog, method: :delete, data: { confirm: "#{t('view.confirm')}" },class: 'btn btn-danger' %></td> 36 </tr> 37 <% end %> 38 <%= paginate @users %> 39 </tbody> 40</table>

users_controller.rb

ruby

1def index 2 @q = Blog.ransack(params[:q]) 3 # binding.pry 4 if params[:q].present? 5 @users = @q.result(distinct: true).page(params[:page]).per(7) 6 # binding.pry 7 elsif params[:expired_at].present? 8 @users = User.find(current_user.id).blogs.page(params[:page]).per(7).order(expired_at: :DESC) 9 elsif params[:priority].present? 10 @users = User.find(current_user.id).blogs.page(params[:page]).per(7).order(priority: :DESC) 11 else 12 @users = User.find(current_user.id).blogs.page(params[:page]).per(7) 13 # binding.pry 14 end 15 # binding.pry 16 end

以下のような形で中間テーブルにBlogモデルに紐づいたラベルを登録させています。

ruby

1<% Label.all.each do |label| %> 2 <% unless label.user_id == current_user.id %> 3 <%= form.check_box :label_ids, { multiple: true, checked: label[:checked], disabled: label[:disabled], include_hidden: false }, label[:id] %> 4 <label><%= label.label_name %></label> 5 <% end %>

schema.rb

ruby:schema.rb

1ActiveRecord::Schema.define(version: 2019_08_05_082729) do 2 3 # These are extensions that must be enabled in order to support this database 4 enable_extension "plpgsql" 5 6 create_table "blogs", force: :cascade do |t| 7 t.string "name", null: false 8 t.text "details", null: false 9 t.datetime "created_at", null: false 10 t.datetime "updated_at", null: false 11 t.datetime "expired_at", default: "2019-08-03 20:25:28", null: false 12 t.string "state", default: "完了", null: false 13 t.integer "priority", default: 0, null: false 14 t.bigint "user_id" 15 t.index ["user_id"], name: "index_blogs_on_user_id" 16 end 17 18 create_table "labelings", force: :cascade do |t| 19 t.integer "blog_id" 20 t.integer "label_id" 21 t.datetime "created_at", null: false 22 t.datetime "updated_at", null: false 23 end 24 25 create_table "labels", force: :cascade do |t| 26 t.string "label_name" 27 t.datetime "created_at", null: false 28 t.datetime "updated_at", null: false 29 t.integer "blog_id" 30 t.bigint "user_id" 31 t.index ["user_id"], name: "index_labels_on_user_id" 32 end 33 34 create_table "users", force: :cascade do |t| 35 t.string "name" 36 t.string "email" 37 t.datetime "created_at", null: false 38 t.datetime "updated_at", null: false 39 t.string "password_digest" 40 t.boolean "administrator", default: false, null: false 41 end 42 43 add_foreign_key "blogs", "users" 44 add_foreign_key "labels", "users" 45end

blog.rb

ruby

1class Blog < ApplicationRecord 2 validates :name, presence: true 3 validates :details, presence: true 4 5 enum priority:{"低": 0, "中": 1, "高": 2} 6 7 belongs_to :user 8 has_many :labelings, dependent: :destroy 9 has_many :labels, through: :labelings 10 11 has_many :task_have_labels, through: :labelings, source: :label 12 # accepts_nested_attributes_for :labels, allow_destroy: true 13 # reject_if: all_blank 14end

label.rb

ruby

1class Label < ApplicationRecord 2 has_many :labelings, dependent: :destroy 3 belongs_to :user, optional: true 4 belongs_to :blog, optional: true 5end

labeling.rb

ruby

1class Labeling < ApplicationRecord 2 belongs_to :blog 3 belongs_to :label 4end

user.rb

ruby

1class User < ApplicationRecord 2 before_validation { email.downcase! } 3 before_destroy :last_one_administrator 4 has_many :blogs, dependent: :destroy 5 has_many :labels, dependent: :destroy 6 validates :name, presence: true, length: { maximum: 30 } 7 validates :email, presence: true, length: { maximum: 255 }, uniqueness: true, 8 format: { with: /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i } 9 has_secure_password 10 validates :password, presence: true, length: { minimum: 6 } 11 12 private 13 14 def last_one_administrator 15 admin_user = User.where(administrator: true) 16 if admin_user.count == 1 && administrator 17 throw :abort 18 else 19 end 20 end 21end

になります、このindex.html.erbのsearch_form_forにusers_controllerのindexからパラメータを渡しLabelモデルのlabel_nameカラムに登録されている、ラベルで検索フォームを作成したいのですが、うまくいきません。
以下の検索フォームに追加する形作りたいです。

ruby

1<%= search_form_for @q, url: users_path do |f| %> 2 <%= f.label :name, "#{t('view.task_name_search')}" %> 3 <%= f.search_field :name_cont, id: 'search_field_name' %> 4 <%= f.label :state, "#{t('view.task_state_search')}" %> 5 <%= f.select :state_eq, ['未着手','着手中','完了'], include_blank: "指定無し" %> 6 ※ここにラベルを選択ボックスの形で検索できるようにしたいがどのように記述すれば良いかわかりません 7 <%= f.submit "#{t('view.search')}" %> 8<% end %>

必要な情報は教えていただければその都度あげていきます。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

解決できました。解決できました。

投稿2019/08/08 06:39

learner_takashi

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問