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

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

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

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

Ruby on Rails

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

Ruby on Rails 4

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

Ajax

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

2回答

3132閲覧

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

solt0723

総合スコア67

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

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

Ajax

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2017/01/11 15:11

###前提・実現したいこと
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だけ渡されるのが正しいはずなので、"_"の出処を調べたのですが、どこから渡されているのか突き止められませんでした。。

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

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

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

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

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

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

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

guest

回答2

0

controllerを

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

とすることで解決

投稿2017/01/12 16:44

solt0723

総合スコア67

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

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

0

ベストアンサー

ruby

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

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

ruby

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

です。

投稿2017/01/11 15:16

cameluby

総合スコア891

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

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

solt0723

2017/01/12 16: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" ```
solt0723

2017/01/12 16:42

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問