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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

704閲覧

find_by を使って値が取り出せない。

sunny_garden

総合スコア6

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/12/10 12:23

#状況の詳細(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

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

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

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

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

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

guest

回答1

0

ベストアンサー

find_by(params[jpkanji: "#{params[:keyword]}"])
params[jpkanji: "#{params[:keyword]}"]がおかしい気がします。
ここはHashでなければなりません
find_by(jpkanji: value)みたいに。

Jpkanjiのどのfieldをどんな値で検索したいのでしょう?

投稿2019/12/10 12:33

winterboum

総合スコア23329

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

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

sunny_garden

2019/12/10 13:21

jpkanjiキー(カラム)に、インクリメンタルサーチで確定した都市名がバリュー(jpkanjiカラムに一致するレコードが全てあります)という組み合わせになります!
winterboum

2019/12/10 13:26

1)インクリメンタルサーチで確定した都市名がバリュー というのは具体的にはどういう形で得られてます? 2)で、「全て」とありますが複数?
sunny_garden

2019/12/11 05:05

1) については、JSを動かして、jpcity レコードのjpkanji から取得した値です。 2)について、一致するレコードは一つしかありません。また、入力した値は、 全てレコードの中に存在します(分かりにくい書き方をしてしまいました><)
winterboum

2019/12/11 05:10

自然言語ではなく、プログラムcodeで、 「具体的にはどういう形で得られてます?」を表現して下さい。でないと回答も日本語で書くことになり伝わりにくくなる
sunny_garden

2019/12/11 14:06

find_by 以下の記述の訂正で解決しました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問