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

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

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

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

Ruby on Rails

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

Ruby on Rails 4

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

Q&A

解決済

1回答

5680閲覧

Rails/ Search Action実行後にindex actionではなくshow actionに飛ぶ

innjera

総合スコア132

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

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

0グッド

0クリップ

投稿2016/10/19 23:03

Rails 5.0.0.1、ruby 2.3.1で開発しています。

Search Actionを実装しているのですが、実行後にIndexに飛ばず、showに飛んでしまいます。(以下記載コードにshow actionは実装していませんが、それは問題ないはずです)

自分が書いたコードを見ても、間違っている箇所が分からず、ご指摘頂けると有り難いです。

routes.rbの記載

ruby

1namespace :admin do 2 root 'top#index' 3 get 'about' => 'top#about', as: :about 4 get 'hello(/:name)' => 'hello#show', as: :hello 5 get 'login' => 'sessions#new', as: :login 6 resource :session, only:[:create, :destroy] 7 resources :users 8 resources :users do 9 collection {get "search"} 10 end 11 resources :users do 12 resources :user_events, only: [ :index ] 13 end 14 resources :products do 15 collection {get "search"} 16 end 17 resources :user_events, only: [ :index ] 18 end 19 end

contollers/admin/users_controllerの記載

ruby

1class Admin::UsersController < Admin::Base 2 3 def index 4 @users = User.all.order("id") 5 end 6 7 def search 8 @users = User.search(params[:q]) 9 render "admin/users/index" 10 end 11end

models/user.rb の記載

ruby

1class << self 2 def search(query) 3 rel = order("user_id") 4 if query.present? 5 rel=rel.where("email LIKE ? OR family_name LIKE? OR given_name LIKE? OR family_name_kana LIKE? OR given_name_kana LIKE? 6 OR user_name LIKE? OR address LIKE?", 7 "%#{query}%", "%#{query}%, %#{query}%", "%#{query}%, %#{query}%", "%#{query}%, %#{query}%") 8 end 9 rel 10 end #def 11 end #class

最後にindex.html.erb

ruby

1<%= form_tag :search_admin_users, method: :get do %> 2<p><%= text_field_tag "q", params[:q] %><%= submit_tag "検索" %></p> 3<% end %> 4 5<div class="links"> 6 <%= link_to '新規登録', :new_admin_user, class: 'table-link' %> 7</div> 8 9<% if @users.present? %> 10<table class="table"> 11 <thead> 12 <tr> 13 <th>id</th> 14 <th>氏名</th> 15 <th>フリガナ</th> 16 <th>ユーザーネーム</th> 17 <th>メールアドレス</th> 18 <th>開始日</th> 19 <th>終了日</th> 20 <th>停止フラグ</th> 21 <th>アクション</th> 22 </tr> 23 </thead> 24 <tbody> 25 <% @users.each do |m| %> 26 <tr> 27 <th scope="row"><%= m.id %></th> 28 <td><%= link_to m.family_name, [:admin, m]%>&nbsp;<%= link_to m.given_name, [:admin, m]%></td> 29 <td><%= m.family_name_kana %>&nbsp;<%= m.given_name_kana%></td> 30 <td><%= m.user_name %></td> 31 <td><%= m.email %></td> 32 <td><%= m.start_date.strftime('%Y/%m/%d') %></td> 33 <td><%= m.end_date.try(:strftime, '%Y/%m/%d') %></td> 34 <td><%= m.suspended?? raw('&#x2611;') : raw('&#x2610;') %></td> 35 <td> 36 <%= link_to '編集', [ :edit, :admin, m ]%> | 37 <%= link_to '削除', [ :admin, m ], method: :delete, 38 data: { confirm: '本当に削除しますか?' } %> 39 </td> 40 </tr> 41 <% end %> 42 </tbody> 43</table> 44<% else %> 45<p>会員情報がありません。</p> 46<% end %> 47 48 <div class="links"> 49 <%= link_to '新規登録', :new_admin_user, class: 'table-link' %> 50 </div> 51</div> 52

検索前画面
イメージ説明
検索実行後画面
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1 resources :users 2 resources :users do 3 collection {get "search"} 4 end 5 resources :users do 6 resources :user_events, only: [ :index ] 7 end

一番上のresources :usersで定義されるshowアクションへのルーティングに先に引っかかってしまい、searchというidでshowアクションに行くようになってしまっています。

このようにまとめると、searchアクションへのルーティングが優先されます。

ruby

1 resources :users do 2 collection {get "search"} 3 resources :user_events, only: [ :index ] 4 end

投稿2016/10/19 23:40

cameluby

総合スコア891

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

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

innjera

2016/10/19 23:48

有難う御座います!解決しました。大変助かります。 単純(基本的・・・)な様で、その点を理解していなかったので、ご指摘頂かなければ解決しませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問