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

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

ただいまの
回答率

92.04%

  • Ruby

    3465questions

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

  • Ruby on Rails

    3122questions

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

  • Ruby on Rails 4

    1725questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • Ajax

    598questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • React.js

    171questions

    A JavaScript library for building user interfaces

Rails内のajaxで発生しているエラーを解消したい

解決済

回答 2

投稿 2017/01/12 00:11

  • 評価
  • クリップ 0
  • VIEW 92

solt0723

score 47

前提・実現したいこと

RailsアプリケーションにReactを導入し、その中でAjaxを利用しているのですが、GETのリクエスト時にエラーが発生しているので、それを解消したいと思っています。

テキストをマイクロポストとして投稿できるWEBサービスを開発しています。

Rails 4.2.2  
Ruby 2.0.0  
で開発をしています。

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

ajaxを記載しているmicropost.js.jsx内の下記の部分でエラーが発生しているように見えます。
(ulrの111の部分は、動的なマイクロポストのidに後々変更する予定です)

  componentDidMount: function() {
    $.ajax({
      url: 'microposts/111',
      dataType: 'json',
      type: "GET",
      cache:     false,
      success: function(messages) {
        this.setState({ messages: messages, isLoading: false });
      }.bind(this),
      error: function(_xhr, status, err) {
        console.error(this.props.url, status, err.toString());
      }.bind(this)
    });
  },

サーバーログを確認すると、下記のようなInternal Server errorが発生しています。

Started GET "/microposts/111?_=1484144300171" for ::1 at 2017-01-11 23:18:20 +0900
Processing by MicropostsController#show as JSON
  Parameters: {"_"=>"1484144300171", "id"=>"111"}
  Micropost Load (0.9ms)  SELECT  "microposts".* FROM "microposts" WHERE "id"."id" = '111'  ORDER BY "microposts"."created_at" DESC LIMIT 1
SQLite3::SQLException: no such column: id.id: SELECT  "microposts".* FROM "microposts" WHERE "id"."id" = '111'  ORDER BY "microposts"."created_at" DESC LIMIT 1
Completed 500 Internal Server Error in 5ms (ActiveRecord: 1.1ms)

SQLite3::SQLException (no such column: id.id):
  app/controllers/microposts_controller.rb:23:in `show'

対応するmicroposts_controller.rbのコードは下記のようになっています。
showアクションを今回のajaxでは利用しています。

class MicropostsController < ApplicationController
  before_action :logged_in_user, only: [:create, :destroy]
  before_action :set_micropost, only: :destroy

  def create
    @micropost = current_user.microposts.build(micropost_params)
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to home_path
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

  def destroy
    @micropost.destroy
    flash[:success] = "Micropost deleted"
    redirect_to request.referrer || home_path
  end

  def show
    @micropost = Micropost.find(id: params[:id])
  end

  private

    def micropost_params
      params.require(:micropost).permit(:content, :picture)
    end

    def set_micropost
      @micropost = current_user.microposts.find_by(id: params[:id])
      redirect_to home_path if @micropost.nil?
    end
end

試したこと

ログを見ると

  Parameters: {"_"=>"1484144300171", "id"=>"111"}


と表記されているのですが、本来であればparameterにはidだけ渡されるのが正しいはずなので、"_"の出処を調べたのですが、どこから渡されているのか突き止められませんでした。。

"_"リクエストのたびに作り変えられているようでした。

その他、必要な情報などあればおっしゃっていただければと思います。

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

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

  def show
    @micropost = Micropost.find(id: params[:id])

findの引数が間違っているため、誤ったSQLが発行されています。正しくは、

  def show
    @micropost = Micropost.find(params[:id])


です。

投稿 2017/01/12 00:16

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/01/13 01:30

    回答ありがとうございます!
    修正したところ別のエラーが表示されました。

    ```
    Started GET "/microposts/111?_=1484238478608" for ::1 at 2017-01-13 01:27:58 +0900
    Processing by MicropostsController#show as JSON
    Parameters: {"_"=>"1484238478608", "id"=>"111"}
    Micropost Load (0.5ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."id" = ? ORDER BY "microposts"."created_at" DESC LIMIT 1 [["id", 111]]
    Completed 500 Internal Server Error in 22ms (ActiveRecord: 0.5ms)

    ActionView::MissingTemplate (Missing template microposts/show, application/show with {:locale=>[:en], :formats=>[:json, :js, :html, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
    * "/Users/old_ogata/rails_projects_3/sample_app/.bundle/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates"
    * "/Users/old_ogata/rails_projects_3/sample_app/app/views"
    * "/Users/old_ogata/rails_projects_3/sample_app/.bundle/gems/web-console-2.0.0.beta3/app/views"
    ```

    キャンセル

  • 2017/01/13 01:42

    上記のエラーについては、テンプレートを探しにいってしまっていたみたいなので、controllerに
    render :nothing => true
    と記載することで、リクエストが成功するようになりました。

    キャンセル

0

controllerを

  def show
    @micropost = Micropost.find(params[:id])
    render :nothing => true
  end


とすることで解決

投稿 2017/01/13 01:44

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

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

ただいまの回答率

92.04%

関連した質問

  • 解決済

    他モデルshowページへ飛ぶ際の条件分岐は??

    前提・実現したいこと 他モデルへのshowページへ飛べるように条件分岐をしたいです。 例えば、あるユーザーがUserとしてログインしていたとします。 そこから、Shopユ

  • 解決済

    他モデル間フォローでのajax実装方法とは?Part2

    前提・実現したいこと 他モデル間でのいいね!機能にajaxを実装したい。 二度目のajaxの質問で大変恐縮です。 いいね!をするまでの流れとしては Userログイン→S

  • 解決済

    stack level too deepのエラーを解決したい

    前提・実現したいこと ツイッターライクなマイクロソフトを投稿できるサービスを作成しています。 Railsアプリケーションで発生しているタイトルのエラーを解消したいと思っています

  • 解決済

    rails チュートリアル indexアクション

    前提・実現したいこと ここに質問したいことを詳細に書いてください (例)PHP(CakePHP)で●●なシステムを作っています。 ■■な機能を実装中に以下のエラーメッセージが

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

  • Ruby

    3465questions

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

  • Ruby on Rails

    3122questions

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

  • Ruby on Rails 4

    1725questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • Ajax

    598questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • React.js

    171questions

    A JavaScript library for building user interfaces

閲覧数の多いRubyの質問