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

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

ただいまの
回答率

89.63%

Ruby on Rails内javascript(coffeescript)での[:id]パラムスの挿入式の書き方

解決済

回答 1

投稿 編集

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

seen

score 47

ruby on railsにてアプリを試作しています。 
フルカレンダーgemを導入中で
・カレンダーに表示された予定データをクリックするとshowアクションに飛ぶ
という機能を付けたいのですが、
パスにデータの:idを入れる書き方がわかりません。

現状このようにしております(rails内のためcoffeescriptで記述していますがjavascript表記でもご教示いただけると助かります。)

  $('#calendar').fullCalendar
    header:
      left: 'prev,next today'
      center: 'title'
     events: '/events.json'
     editable: true
     eventClick: (calEvent) ->
#     alert '会場: ' + calEvent.id ←これでidが拾えたので
      location.href = '/events/ + calEvent.id '#← /events/1 にリンクしたい
 return


CalEventでEvent内のidを引っ張り出して location.href = '/events/(:id)'のidに挿入して
↓ここへ飛ばしたいのですが

def show
  @event = Event.find params[:id]
end

上手くいきませんでした。calEventでデータの中身を呼び出せたのでイメージだけで記述しましたが上手くいかず検索でも手がかりが捕めません。
どのように書けばいいのかわからないです。
どうかご教示いただけますようよろしくお願いします。

追記
上手くいかないとはRailsのエラーがこのように出てしまいます。

ActiveRecord::RecordNotFound in EventsController#show

Couldn't find Event with 'id'= + calEvent

Extracted source (around line #13):
11
12  def show        
13      @event = Event.find params[:id]
14  end
15

Parameters:
{"id"=>" + calEvent", "format"=>"id"}

以上がエラー内容です。
またブラウザのURLは
http://localhost:3000/events/%20+%20calEvent.id
となっており、やりたいのはこのEventレコードのidカラムに入っている1を挿入し
http://localhost:3000/events/1
としたいです。

引き続きよろしくお願いします。

    

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • s-show

    2017/10/05 01:49

    上手くいかないというのは、予定データをクリックしても反応がないという状態でしょうか? それとも、Railsのエラーが出てしまうという状態でしょうか?

    キャンセル

  • seen

    2017/10/05 19:56

    ご質問ありがとうございます。 こちらはRailsのエラーが出てしまいます。 質問の本文にエラー内容を追加しますのでご覧いただけると幸いです。 よろしくお願いします。

    キャンセル

回答 1

checkベストアンサー

0

掲載されたコントローラーのshowメソッドのコードが、質問用にゼロから手入力したものではなく、EventsController.rbファイルからコピペしたものであれば、以下のとおり修正してみてください。

修正前:@event = Event.find params[:id]
修正前:@event = Event.find(params[:id])
params[:id]をかっこで囲んでいます)

---(以下、2017年10月6日追記)---
alert '会場: ' + calEvent.idでidが取得できて、location.href ='/events/ + calEvent.id 'でidが取得できない理由ですが、前者はcalEvent.idがシングルクオテーション(')で囲まれていないのに対して、後者では'/events/ + calEvent.id '全体がシングルクオテーション(')で囲まれているため、'/events/ + calEvent.id 'が文字列として解釈されています。
ブラウザのURL欄に表示されているhttp://localhost:3000/events/%20+%20calEvent.idという文字列をURLエンコード・デコード|日本語URLをサクッと変換 | すぐに使える便利なWEBツール | Tech-Unlimitedでデコードすると、http://localhost:3000/events/   calEvent.idという文字列に変換されています。そのため、location.href ='/events/ + calEvent.id 'の部分をlocation.href ='/events/' + calEvent.idに修正してみてください。
---(追記ここまで)---

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/06 10:39

    ご回答いただきありがとうございます。 ご教示の通りやってみましたが、かっこがついた同じエラー内容になりました。
    また、coffeescriptで
    location.href = '/events/ + calEvent.id
    としている「+ calEvent.id」の部分を手動で送りたいparamsである「1」にして
    location.href = '/events/ 1
    として実行すると意図した通りのshow
    ページが表示されます。 どうにかid「1」に変換させてコントローラーに送りたいのですが。。

    キャンセル

  • 2017/10/06 11:37

    掲載されたエラーメッセージJavascriptのコードで見落としている部分がありました。回答を修正しました(追記部分)ので、再度試してみて頂けますでしょうか。

    キャンセル

  • 2017/10/06 13:30

    再度ご対応いただいてありがとうございます! ご教示のとおりで解決できました。 '文字列'... 言われて初めて気が付きました。。 まったく勉強が足りていませんね...
    大変助かりました。本当にありがとうございました!

    キャンセル

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

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