回答編集履歴
2
K
    
        answer	
    CHANGED
    
    | 
         @@ -42,7 +42,7 @@ 
     | 
|
| 
       42 
42 
     | 
    
         
             
            <%= f.search_field :place_region_cont %>
         
     | 
| 
       43 
43 
     | 
    
         
             
            <%= f.search_field :place_prefecture_cont %>
         
     | 
| 
       44 
44 
     | 
    
         
             
            <%= f.search_field :place_city_cont %>
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
            <%end%>
         
     | 
| 
       46 
46 
     | 
    
         
             
            ``` 
         
     | 
| 
       47 
47 
     | 
    
         
             
            リンクなら
         
     | 
| 
       48 
48 
     | 
    
         
             
            ```ruby
         
     | 
1
変更
    
        answer	
    CHANGED
    
    | 
         @@ -10,9 +10,49 @@ 
     | 
|
| 
       10 
10 
     | 
    
         
             
            都道府県を入力しなかったり、字が間違っていたり。
         
     | 
| 
       11 
11 
     | 
    
         
             
            入力のブレも存在します。
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
      
 13 
     | 
    
         
            +
            どうも管理者が入力するようなので具体的なコードを書くと
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
            まずransackというgemを導入します。
         
     | 
| 
      
 15 
     | 
    
         
            +
            地方(region)・都道府県(perfecture)・地域(city)
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
            こんな感じでしょうかcityは六本木エリアとか漠然としたものを想像しています。
         
     | 
| 
      
 17 
     | 
    
         
            +
            で、教科書通りならregion modelとperfecture modelとcity modelを作るのですが。
         
     | 
| 
      
 18 
     | 
    
         
            +
            cityをどんだけ細かくするかにもよりますが、検索時のjoinのコストを考えると、下手な正規化を行わず。
         
     | 
| 
      
 19 
     | 
    
         
            +
            tableは places id,region:string,perfecture:string,city:string)
         
     | 
| 
      
 20 
     | 
    
         
            +
            |id|region|perfecture|city|
         
     | 
| 
      
 21 
     | 
    
         
            +
            |:--|:--|:--:|--:|
         
     | 
| 
      
 22 
     | 
    
         
            +
            |1|関東|東京都|六本木|
         
     | 
| 
      
 23 
     | 
    
         
            +
            |2|関東|東京都|新宿|
         
     | 
| 
       15 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
            で十分かと思います。
         
     | 
| 
      
 26 
     | 
    
         
            +
            place has_many: :shops
         
     | 
| 
      
 27 
     | 
    
         
            +
            shop belongs_to: place
         
     | 
| 
      
 28 
     | 
    
         
            +
            みたいにしてplace_idをshopにもたせて
         
     | 
| 
      
 29 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 30 
     | 
    
         
            +
            shops_controller.rb
         
     | 
| 
      
 31 
     | 
    
         
            +
            def index
         
     | 
| 
      
 32 
     | 
    
         
            +
            @q=Shop.search(params[:q])
         
     | 
| 
      
 33 
     | 
    
         
            +
            @shops=@q.result
         
     | 
| 
      
 34 
     | 
    
         
            +
            ~
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
      
 36 
     | 
    
         
            +
            ```
         
     | 
| 
      
 37 
     | 
    
         
            +
            として
         
     | 
| 
      
 38 
     | 
    
         
            +
            サーチフォームなら
         
     | 
| 
      
 39 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 40 
     | 
    
         
            +
            _serach.html.erb
         
     | 
| 
      
 41 
     | 
    
         
            +
            <%= search_form_for @q ,:url=>{:controller=>"shops",:action=>"index"} do |f| %>
         
     | 
| 
      
 42 
     | 
    
         
            +
            <%= f.search_field :place_region_cont %>
         
     | 
| 
      
 43 
     | 
    
         
            +
            <%= f.search_field :place_prefecture_cont %>
         
     | 
| 
      
 44 
     | 
    
         
            +
            <%= f.search_field :place_city_cont %>
         
     | 
| 
      
 45 
     | 
    
         
            +
            serach
         
     | 
| 
      
 46 
     | 
    
         
            +
            ``` 
         
     | 
| 
      
 47 
     | 
    
         
            +
            リンクなら
         
     | 
| 
      
 48 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 49 
     | 
    
         
            +
            <%= link_to '東京都',{:controller=>"shops",:action=>"index",:q=>{:place_prefecture_cont=>URI.escape('東京都')}%>
         
     | 
| 
      
 50 
     | 
    
         
            +
            ```
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
            みたいな感じにすればいいと思います。
         
     | 
| 
      
 52 
     | 
    
         
            +
            URI.escapeはなくてもいいかもしれませんが念のため
         
     | 
| 
      
 53 
     | 
    
         
            +
            controllerの一番上に
         
     | 
| 
      
 54 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 55 
     | 
    
         
            +
            と追記してください
         
     | 
| 
       17 
56 
     | 
    
         | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
       18 
58 
     | 
    
         
             
            参考になれば。
         
     |