30697


Railsで検索機能をつけたかったので以下のように`search`をコントローラに追加して  
検索結果が0件ならエラー表示、一件なら個別、複数件なら indexを表示するようにしています。

### app/controllers/companies_controller.rb

[code]

      def search
        @companies = Company.search(params[:search]).page(params[:page])
      end
    
[/code]

### app/views/companies/search.html.erb

[code]

    <%= render 'search_error' if @companies.count == 0 %>
    <%= render 'show', company: @companies.first if @companies.count == 1  %>
    <%= render 'index', companies: @companies if @companies.count > 1 %>
    
[/code]

ここで個別ページを表示する時はURLを`show`の時と同じ個別のものに変えたくなったのですが、  
その場合はやはりcontroller側に分岐処理を書くことになるのでしょうか？

ただそうしても `redirect_to` を使うと再取得で無駄な処理が走ってしまうし、  
うまい方法が思いつかず困っています。

このような場合に一般的な処理などはありませんか？


CC BY-SA 3.0
2016-11-25T07:54:35.917
30664
2016-11-26T18:13:15.793
3271
question
ruby-on-rails
検索結果が一件の場合のみURLを個別ページの物に変える


一般論としては、Controllerで `redirect_to` を利用して個別ページにリダイレクトするべきだと思います。

そのままのURLで個別ページを表示した場合、将来的にそのそのURLで個別の情報が表示されない (検索結果が2件以上になる)
可能性があり、URLが示すページの内容が異なってしまうためです。(ブックマークやリンクした場合に混乱を招く可能性があります。)


CC BY-SA 3.0
2016-11-26T18:13:15.793
30697
2016-11-26T18:13:15.793
76
30664
answer