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

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

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

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

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2124閲覧

DBに配列で保存した値をgonを使用してJSに値を渡したが、JS内では配列を文字列として抽出とする事ができない

Kengo_jeb

総合スコア9

Ruby on Rails 5

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

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/21 16:08

gon 'gem'を使用して、DBに保存した配列のデータをJS内に受け渡した。その後、その取得した配列からランダムに一つの値を抽出する動作を行いたいが、何故かありえない数値の変数が取得される。
index = Math.floor(Math.random() * colors.length);の部分で正常に値を取得するにはどうしたらよろしいでしょうか?

「このアプリの概要」
システムの構造としては、チェックボックスで複数選択した値をDB内に配列で取得できるようにしたので、その値をgon変数に置き換え、JS内に変数を渡した。その値を元に、ランダムで色を変えるシステムを作成したい。

index.js コード function effect() { var element = document.getElementById("target"); var colors = gon.product_color; console.log(colors); //配列で値が取得できている // var colors = ["yellow" ,"red" ,"blue"];  // 上記の値で送ると正常に動作する index = Math.floor(Math.random() * colors.length); console.log(index); //配列内の数とは異なる値が作成される //colorsに格納された数値をランダムで表示している   element.style.backgroundColor = colors[index]; }

consolo.logで確認したデータ
イメージ説明

products_controller.rb コード class ProductsController < ApplicationController def index @products = Product.all @products.map do |product| product_color = product.product_color gon.product_color = product_color end end def new @product = Product.new @Colors = Color.all end def create @product = Product.new(product_params) if @product.save redirect_to root_path else render :new end end private def product_params params.require(:product).permit(product_color:[]) end end

DB内のデーター
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは

gon.product_color をそのまま var colors に代入するのではなく、以下のように、JSON.parse した結果を代入するように修正してみるといかがでしょうか?

diff

1- var colors = gon.product_color; 2+ var colors = JSON.parse(gon.product_color);

追記

動作確認はしていませんが、ドキュメントを見ると、gon はrubyの配列をJSの配列にしてくれるようなので、サーバーサイドでparseしてもよいかと思います。

diff

1+ require "json"

diff

1- gon.product_color = product_color 2+ gon.product_color = JSON.parse(product_color)

上記の場合は、フロントエンドで再度 JSON.parse する必要はないので、

diff

1var colors = gon.product_color;

のままでうまくいくのではと思います。

投稿2020/05/21 23:06

編集2020/05/21 23:19
jun68ykt

総合スコア9058

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

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

Kengo_jeb

2020/05/22 07:48 編集

ご回答ありがとうございます。 上記の記述で書きましたら問題なく動作しました! ありがとうございます!!!
jun68ykt

2020/05/21 23:16

どういたしまして???? 回答に追記したように、Rails側でparseしてもよいかもしれません。 ともあれm > 問題なく動作しました! とのことでよかったです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問