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

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

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

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

Ruby on Rails 4

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

Q&A

解決済

2回答

4941閲覧

railsで検索ボックスを追加する機能を増やしたいのですがイメージがわきません。

drizzing20

総合スコア363

Ruby

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

Ruby on Rails 4

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

0グッド

1クリップ

投稿2016/10/18 14:29

編集2016/10/18 14:49

railsで自作のサイトに検索ボックスを追加したいと思い検索したら、コピペしたら簡単にできてしまったのですがなぜそうなるのかわかりません。
かなり抽象的な質問なのでざっくりとした説明でよいのでお願いします。

model

RUBY

1class Project < ActiveRecord::Base 2 def self.search(search) #self.でクラスメソッドとしている 3 if search # Controllerから渡されたパラメータが!= nilの場合は、titleカラムを部分一致検索 4 Project.where(['name LIKE ?', "%#{search}%"]) 5 else 6 Project.all #全て表示。 7 end 8 end 9end

Project.where(['name LIKE ?', "%#{search}%"])の中の
'name LIKE ?', "%#{search}%"]←のLikeのような書き方をなんと呼びますか?(これの使い方を勉強したいのですが、上手く検索にヒットしないのでお願いします)

modelの中のすべてをキーワード検索したい場合は単純にクエリを増やすなどするのでしょうか

view

RUBY

1<%= form_tag projects_path, :method => 'get' do %> <%# projects_pathはモデル名で読みかえること %> 2 <p> 3 <%= text_field_tag :search, params[:search] %> 4 <%= submit_tag "Search", :name => nil %> 5 </p> 6<% end %>

:method => 'get'
↑は決まった言い方なのでしょうか

controller

RUBY

1class ProjectsController < ApplicationController 2 def index 3 #ViewのFormで取得したパラメータをモデルに渡す 4 @projects = Project.search(params[:search]) 5 end 6end

参考サイト http://qiita.com/budougumi0617/items/d98fc15adea4dab438e7

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

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

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

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

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

guest

回答2

0

ベストアンサー

簡単な処理の流れを説明すると、以下のようになると思います

erb

1# view 2 <%= text_field_tag :search, params[:search] %>

に入力した検索ワードの値を

erb

1# view 2<%= form_tag projects_path, :method => 'get' do %>

projects_path(projects_controllerのindexアクション)に飛ばす。

ruby

1# app/controllers/projects_controller.rb 2 @projects = Project.search(params[:search])

projects_controllerのindexアクションで先程入力した検索ワードをparams[:search]として取得し、
Projectモデルのデータを取得する。

ruby

1# app/models/project.rb 2 Project.where(['name LIKE ?', "%#{search}%"])

モデルではコントローラーから渡された検索ワードを用いでレコードを取得する。

ちなみにLIKEは「あいまい検索」です。

ruby

1Project.where(['name LIKE ?', "%#{search}%"])

ruby

1search =Ruby2Project.where(['name LIKE ?', "%#{search}%"])

上のような場合、Projectのレコードからnameが"Ruby"にマッチするレコードを取得します。
"Rubyのproject" => 取得される
"すごいRubyのproject" => 取得される
"project of Ruby" => 取得される
"Ruby project" => 取得される
"Javascriptのproject" => 取得されない
"Rub project" => 取得されない
"uby project" => 取得されない

http://www.accessclub.jp/sql/09.html

投稿2016/10/18 14:45

編集2016/10/18 14:50
cameluby

総合スコア891

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

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

0

'name LIKE ?', "%#{search}%"]←のLikeのような書き方をなんと呼びますか?(これの使い方を勉強したいのですが、上手く検索にヒットしないのでお願いします)

SQL です。
Wikipedia SQL

本来はデータベースの問い合わせ言語ですがRailsのActiveRecordを介して使用する事もできます。
通常RailsではSQLがActiveRecordの影に隠れてみえないのですが、SQLを理解した上でActiveRecordを利用すると、色々とActiveRecordのよくわからない部分がわかってきますので、ぜひSQLの理解をお勧めします。

:method => 'get'
↑は決まった言い方なのでしょうか

これはを書くか否かは config/routes.rb の設定によりますので決った言い方(毎回必ず書くもの)ではないです。

投稿2016/10/18 14:34

hana-da

総合スコア1728

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問