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

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

ただいまの
回答率

88.63%

railsでAjaxから複数のDataを受け取り、DBに登録したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,165

rakiamusic

score 19

 前提・実現したいこと

レイルズで注文登録システムを作っています。
Ajaxを使用してコントローラ側に複数のData(商品idとユーザid)、
を渡してDBに登録したいのですが、コントローラ側でうまく値を取り出せない状況です。
いろいろ模索しましたがわからず、どなたかご教授いただけないでしょうか?

ruby on rails 5.2.1

 発生している問題・エラーメッセージ

メッセージ
Started GET "/user/item_additional?**[object%20Object]**" for 127.0.0.1 at 2018-10-23 18:12:01 +0900
Processing by UserController#item_additional as JSON
  Parameters: {"object Object"=>nil}
   (0.2ms)  BEGIN
  ↳ app/controllers/user_controller.rb:53
  Item Create (0.3ms)  INSERT INTO `items` (`created_at`, `updated_at`) VALUES ('2018-10-23 09:12:01', '2018-10-23 09:12:01')


Parameters: {"object Object"=>nil}とのメッセージ。

product_idとuser_idがないまま登録されている状況です。

 該当のソースコード

<Ajax側記載>
var data = { 'product_id' : product_id, 'user_id' : user_id };
$.ajax({
  url: '/user/item_additional',
  type: 'GET',
  data: data,
  rocessData: false,
  contentType: false,
  dataType: 'json'
})

<コントローラ側記載>
user_controller.rb

@item = Item.new(
  product_id: params[:product_id],  
  user_id: params[:user_id]
)
@item.save
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

Hi again, I found something related. If you like, you can check it.
http://api.jquery.com/jquery.ajax/
Please check the explanation of "processData" option, which I post it below:

processData (default: true)
Type: Boolean
By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.


And I don't think you need this option to make it work.
Just use this code block below, it is enough to make a JSON request:

    <script type="text/javascript">
        var data = { 'product_id' : 10, 'user_id' : 12 };
        $.ajax({
          url: '/test',
          type: 'GET',
          data: data,
          dataType: 'json'
        })
    </script>


The server is processing as JSON

Processing by PagesController#test as JSON
  Parameters: {"product_id"=>"10", "user_id"=>"12"}

Hi, I tried your code and it works for me.
I can access params[:product_id] and params[:user_id] in the action.

I am using jQuery 1.11.1 + Rails 5.2.1
Can you provide more info?

    <script type="text/javascript">
        var data = { 'product_id' : 10, 'user_id' : 12 };
        $.ajax({
          url: '/test',
          type: 'GET',
          data: data,
          rocessData: false,
          contentType: false,
          dataType: 'json'
        })
    </script>
Started GET "/test?product_id=10&user_id=12" for 127.0.0.1 at 2018-10-23 18:22:54 +0800
Processing by PagesController#test as JSON
  Parameters: {"product_id"=>"10", "user_id"=>"12"}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • キャンセル

  • 2018/10/24 10:43

    I tryed
    var data = { 'product_id' : 3, 'user_id' : 1 };

    →Started GET "/user/item_additional?[object%20Object]" for 127.0.0.1 at 2018-10-24 10:36:32 +0900
    Processing by UserController#item_additional as JSON
    Parameters: {"object Object"=>nil}

    Thanks your help
    I consider the other way..

    キャンセル

  • 2018/10/24 12:38

    $.ajax({
    url: '/test',
    type: 'GET',
    data: data,
    dataType: 'json'
    })

    ↑↑ It went well!

    Started GET "/user/item_additional?product_id=3&user_id=1" for 127.0.0.1 at 2018-10-24 12:22:37 +0900
    Processing by UserController#item_additional as JSON
    Parameters: {"product_id"=>"3", "user_id"=>"1"}

    ーーーーーーーーーーーーー
    Thank you for your great help.

    ARIGATO !

    キャンセル

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

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る