#状況の詳細(binding.pryを実行)
22: def search_result 23: @jpcity = Jpcity.find_by(params[jpkanji: "#{params[:keyword]}"]) 24: render action: :show => 25: binding.pry 26: end [3] pry(#<JpcitiesController>)> "#{params[:keyword]}" => "新潟" [4] pry(#<JpcitiesController>)> @jpcity => #<Jpcity:0x00007f80ae9dd510 id: 1, pref: "北海道", jpkanji: " 札幌", simplified: "札幌", hira: "さっぽろ", alphabet: "Sapporo", pinyin: "Zha huang", created_at: Sat, 07 Dec 2019 11:10:43 UTC +00:00, updated_at: Sat, 07 Dec 2019 11:10:43 UTC +00:00>
なお、showアクションのビューに遷移した時、「さっぽろ 43.0614」 と表示されます。
しかし、そのpath は、
http://localhost:3000/jpcities/search_result?utf8=✔︎&keyword=新潟
です。
(補足:search_resultアクションのビューから、renderでshowアクションのビューへ遷移しています)
ここで新潟市の情報を出したいのですが、レコードの一番最初の札幌の情報が表示されます。
どの都市がフォームに入力されても全て同じ結果です。
(補足:フォームへの入力は、インクリメンタルサーチが起動しています。)
#ファイルの詳細
###jpcities.controller
class JpcitiesController < ApplicationController def index end def search @jpcity_name = Jpcity.where('jpkanji LIKE(?)', "%#{params[:keyword]}%").limit(6) @jpcity_hira = Jpcity.where('hira LIKE(?)', "%#{params[:keyword]}%").limit(6) @jpcity_alpha = Jpcity.where('alphabet LIKE(?)', "%#{params[:keyword]}%").limit(6) if @jpcity_name != [] @jpcities = @jpcity_name elsif @jpcity_hira != [] @jpcities = @jpcity_hira else @jpcities = @jpcity_alpha end respond_to do |format| format.html format.json{render json:@jpcities} end end def search_result @jpcity = Jpcity.find_by(params[jpkanji: "#{params[:keyword]}"]) render action: :show end def show end private def jpcity_params params.require(:jpcity).permit( :pref, :jpkanji, :simplified, :hira, :alphabet, :latitude_id, jpcity2_attributes:[ :latitude, :longitude, :pref, :income, :r_price, :popul, :size, :dense, :jpcity_id, :latitude_id ] ) end end
search.js
$(function(){ var search_list = $("#jpcity-search-result-latitude"); function AppendJpcitiesName(jpcity){ var html = `<div class="jpcity-name-stage-lat"> <p class="jpcity-name" type="hidden" data-jpcity__id="${jpcity.id}" data-jpcity__name=${jpcity.jpkanji}>${jpcity.jpkanji}</p> </div>` search_list.append(html); } $(function(){ $(".clearfix_lat").on("keyup", function(){ var input = $(".clearfix_lat").val(); var preWord; if (input !== preWord){ $.ajax({ type: 'get', url: '/jpcities/search', data: { keyword: input }, dataType: 'json' }) .done(function(jpcities) { $(search_list).empty(); if(input != "") { $(search_list).show(); jpcities.forEach(function(jpcity){ AppendJpcitiesName(jpcity); }); } else { $(search_list).hide(); $(search_list).empty(); } preWord = input; }) } }) }) }) $(function(){ var search_list = $("#jpcity-search-result-climate"); function AppendJpcitiesName(jpcity){ var html = `<div class="jpcity-name-stage-cli"> <p class="jpcity-name" type="hidden" data-jpcity__id="${jpcity.id}" data-jpcity__name=${jpcity.jpkanji}>${jpcity.jpkanji}</p> </div>` search_list.append(html); } $(function(){ $(".clearfix_cli").on("keyup", function(){ var input = $(".clearfix_cli").val(); var preWord; if (input !== preWord){ $.ajax({ type: 'get', url: '/jpcities/search', data: { keyword: input }, dataType: 'json' }) .done(function(jpcities) { $(search_list).empty(); if(input != "") { $(search_list).show(); jpcities.forEach(function(jpcity){ AppendJpcitiesName(jpcity); }); } else { $(search_list).hide(); $(search_list).empty(); } preWord = input; }) } }) }) $(document).on("click", ".jpcity-name-stage-lat", function () { var jpcityId = $(this).data("jpcity__id"); var jpcityName = $(this).text().trim(); $(".search-form-lat").empty(); $(".search-form-lat").val(jpcityName); // $(".").val(jpcityId); $("#jpcity-search-result-latitude").empty(); }); $(document).on("click", ".jpcity-name-stage-cli", function () { var jpcityId_cl = $(this).data("jpcity__id"); var jpcityName_cl = $(this).text().trim(); $(".search-form-cl").empty(); $(".search-form-cl").val(jpcityName_cl); $(".jpcitiy-name__id").val(jpcityId_cl); $("#jpcity-search-result-climate").empty(); }); })
JSでidを取得してフォームに反映させる方法は断念しています。
###search.html.haml(一部抜粋)
%p.jp-search-field__middle__stage__latitude 任意の日本の都市名をご入力ください^^ .jp-search-field__middle__stage__latitude__form-box .jp-search-field__middle__stage__latitude__form-box__form = form_tag("jpcities/search_result", method: :get) do %input.search-form-lat{name:"keyword", placeholder: "日本の都市名", type: "text", class:'clearfix_lat',style:'padding-left:10px;'} %label.search-icon.submit-stage = fa_icon 'search fa-lg',class:'submit' #jpcity-search-result-latitude
###search_result.html.haml
= render partial: template: "jpcities/show", collection: @jpcity
###show.html.haml
.div = @jpcity.hira = @jpcity.jpcity2.latitude
###jpcity.rb
class Jpcity < ApplicationRecord has_one :jpcity2 has_one :jpclimate accepts_nested_attributes_for :jpcity2 accepts_nested_attributes_for :jpclimate end
###routes.rb
Rails.application.routes.draw do # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root to: 'jpcities#search' resources :jpcities do collection do get 'search' get 'search_result' end end resources :chcities end
###jpcities テーブル
md(!cd22e011378b46b8955179f80569509d,0.707182320441989)
###jpcity2sテーブル
latitude,longitude,pref,r_price,income,jpcity_id,popul,size,dense,latitude_id 43.0614,141.355,北海道,,,1,,,,77 40.8869,140.59,青森県,,,2,,,,68 39.7021,141.155,岩手県,,,3,,,,63 38.2678,140.869,宮城県,,,4,,,,58 39.6899,140.343,秋田県,,,5,,,,63 (以下省略します)
以上です。何卒よろしくお願いいたします m_ _m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/10 13:21
2019/12/10 13:26
2019/12/11 05:05
2019/12/11 05:10
2019/12/11 14:06