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

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

ただいまの
回答率

90.62%

  • Ruby on Rails 4

    2409questions

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

Rails 4.2.10で検索機能を実装できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 103

koichi8888

score 11

 前提・実現したいこと

railsのアプリでトップページで各カラムのデータをAnd検索で検索する機能を実装したいです。
エラーメッセージからは原因が予測できず、投稿させていただきました。
下記のURLを参考にしました。
https://qiita.com/budougumi0617/items/d98fc15adea4dab438e7

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

We're sorry, but something went wrong.
If you are the application owner check the logs for more information.

 該当のソースコード

items_controller.rb

class ItemsController < ApplicationController

  def index
    # データを降順で表示する
    @items = GyomuDatum.all.order(created_at: 'desc')

    # パラメータとしてサーバ名を受け取っている場合は絞って検索する
    #if params[:target_server].present? 
    #@items = @items.get_by_target_server params[:target_server]
    #end

    #ViewのFormで取得したパラメータをモデルに渡す
    @items = Item.search(params[:search])

  end

  def show
  end

  def new
    @item = GyomuDatum.new
  end

  def create
    # render plain: params[:GyomuDatum].inspect
    # save
    # @item = Item.new(params[:GyomuDatum])
    # @item = GyomuDatum.new(params.require(:GyomuDatum).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment))
     @item = GyomuDatum.new(item_params)
    # @item.save
    # redirect
    # redirect_to items_path

    if @item.save
      # redirect
      redirect_to items_path
    else
      # render plain: @item.errors.inspect
      render 'new'
    end
  end


  def edit
    @item = GyomuDatum.find(params[:id])
  end

  def update
   @item = GyomuDatum.find(params[:id])
#   pp @item
#   pp item_params

    if @item.update(item_params)
      redirect_to items_path
     else
      render 'edit'
    end
  end

 def destroy
   @item = GyomuDatum.find(params[:id])
   @item.destroy
   redirect_to items_path
 end

#  private
#    def item_params
#      params.require(:GyomuDatum).permit(:manage_id)
#      params.require(:gyomu_datum).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment)
#      params.require.fetch(:GyomuDatum,{}).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment)
#    end

  private
    def item_params
      permits = [
        :manage_id,
        :category_id,
        :publish_corporation,
        :ip_address,
        :target_server,
        :start_date,
        :end_date, 
        :comment
      ]
      params.require(:gyomu_datum).permit(permits)
    end


#  private
#    def post_params
#      params.require(:post).permit(:title, :body)
#    end

end


index.html.erb

<h2>
  <ul class="header-left">
  <%= link_to 'HOME' , root_path, class: 'header-menu' %>
  <%= link_to 'データ登録' , new_item_path, class: 'header-menu' %>
  <%= link_to 'ユーザ管理' , new_item_path, class: 'header-menu' %>
  <%= link_to '操作履歴一覧' , new_item_path, class: 'header-menu' %>
  </ul>
  <ul class="header-right">
  <%= link_to 'ログアウト' , new_item_path, class: 'header-menu' %>
  </ul>
</h2>

<br>
<br>
<br>
<h2>
通知
</h2>
<br>
<br>
<br>
<h2>
データ検索
</h2>
<% form_tag items_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :target_server => nil %>
  </p>
<% end %>
<h2>
<br>
<br>
<br>
<br>
データ一覧
</h2>



<table border="1">
 <tr>
  <th>管理ID</th>
  <th>カテゴリ</th>
  <th>発行会社</th>
  <th>IPアドレス</th>
  <th>対象サーバ</th>
  <th>有効期限の開始日</th>
  <th>有効期限の終了日</th>
  <th>コメント</th>
  <th>操作</th>
 </tr>
<% @items.each do |item| %>
 <tr>
  <td><%= item.manage_id %></td>
  <td><%= item.category_id %></td>
  <td><%= item.publish_corporation %></td>
  <td><%= item.ip_address %></td>
  <td><%= item.target_server %></td>
  <td><%= item.start_date %></td>
  <td><%= item.end_date %></td>
  <td><%= item.comment %></td>
  <td>
  <%= link_to '[Edit]', edit_item_path(item), class: 'command' %>
  <%= link_to '[x]', 
  item_path(item), 
  method: :delete,
  class: 'command',
  data: { confirm: 'データ削除しますか?' } %>
  </td>
 </tr>

<% end %>
</table>

<h2>
  <%= link_to 'CSV出力' , new_item_path, class: 'header-menu' %>
</h2>


gyomu_datum.rb

class GyomuDatum < ActiveRecord::Base

    validates :manage_id, presence: true
    validates :category_id, presence: true
    validates :publish_corporation, presence: true
    validates :ip_address, presence: true
    validates :target_server, presence: true
    validates :start_date, presence: true
    validates :end_date, presence: true



    # 検索機能

    # サーバ名による絞り込み


    # サンプル
def self.search(search)
  if search
    find(:all, :conditions => ['target_server LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end





end

 試したこと

Webアプリのトップページにアクセスした際にエラーが表示され、アクセスできず、ログ(log/development.log)にも何も出力されていません。
gyomu_datum.rbの検索機能部分の記載をコメントアウトしたところ、トップページにアクセスできるようになります。

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

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

find(:all)などはRails 3時代の書き方です(Rails 4では、.find(id1つ、またはidの配列)という書き方しかできなくなっています)。whereで書き直しましょう。

Railsドキュメントのfindの項目

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/05/21 11:53

    ご回答ありがとうございます。Railsのバージョンによって記載方法が違うのですね。記載方法を変更し、動作確認してみます。

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Ruby on Rails 4

    2409questions

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