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

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

ただいまの
回答率

90.51%

  • Ruby

    9406questions

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

  • Ruby on Rails 4

    2541questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,744

drizzing20

score 351

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

model

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


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

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

view

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


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

controller

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

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


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

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


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

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


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

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


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

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

Project.where(['name LIKE ?', "%#{search}%"])
search = ”RubyProject.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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

SQL です。
Wikipedia SQL

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Ruby

    9406questions

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

  • Ruby on Rails 4

    2541questions

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