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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

628閲覧

syntax error, unexpected tIDENTIFIER, expecting end &unexpected end, expecting end-of-input について

milktea246

総合スコア23

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2022/05/12 10:40

前提

urlにnew.html.erbに遷移するためのパスを直接入力してnew.html.erbに遷移した直後に、
18行目で syntax error, unexpected tIDENTIFIER, expecting end
51行目で syntax error, unexpected end, expecting end-of-input
こちらのエラーが起こってしまいました。

実現したいこと

エラーを解消し、form_forで作成している部分を表示できるようにしたいです。

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

https://gyazo.com/83000f2ea02cd6e433c857b0ee377b0c
https://gyazo.com/623bcbd580e98a6b14055c72cd0ac7b6

該当のソースコード

routes.rb

Rails.application.routes.draw do devise_for :users root to: "home#index" resources :users resources :informations do resources :details end end

details_controller.rb

class DetailsController < ApplicationController def index end def new @information = Information.new(params[:detail]) @detail = Detail.new end def create @detail = Detail.new(detail_params) if @detail.save redirect_to information_detail_path(@information, @detail) else render :new end end def show end def edit end private def datail_params params.require(:detail).permit(:information_id, :rice, :medicine, :vaccination, :vaccination_image, :weight, :motion, :snack, :remarks) end end

new.html.erb

<section class="hero is-warning"> <div class="hero-body"> <div class="container"> <h1 class="title"> ペットの記録 </h1> </div> </div> </section> <section class="section"> <div class="container"> <div class="columns is-centered"> <div class="column is-6"> <%= form_for @detail local: true do |f| %> <%= f.label :rice, "ご飯", class: "label" %> <%= f.text_field :rice, class: "input is-success" %> <%= f.label :medicine, "処方薬", class: "label" %> <%= f.text_field :medicine, class: "input is-success" %> <%= f.label :vaccination, "ワクチン接種の有無", class: "label" %> <%= f.text_field :vaccination, class: "input is-success" %> <%= f.label :vaccination_image, "ワクチン接種証明", class: "label" %> <%= f.attachment_field :vaccination_image, class: "input is-success" %> <%= f.label :weight, "体重", class: "label" %> <%= f.text_field :weight, class: "input is-success" %> <%= f.label :motion, "運動", class: "label" %> <%= f.text_field :motion, class: "input is-success" %> <%= f.label :snack, "お菓子", class: "label" %> <%= f.text_field :snack, class: "input is-success" %> <%= f.label :remarks, "備考", class: "label" %> <%= f.text_field :remarks, class: "input is-success" %> <%= f.submit "投稿", class: "button is-success" %> <% end %> </div> </div> </div> </section>

試したこと

endタグがないことでエラーが起きているのかと思い、探しましたがみつかりませんでした。

わかる方がいましたら教えていただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

form_for @detail local: true do |f

が、構文的におかしいので、この行が無視されて、構文解析が続き、
このdoに対応しているつもりのendが、「do無しにendが出てきた」という状態になっています。

上記は、どういう構文のつもりなのでしょう?

投稿2022/05/12 13:05

otn

総合スコア84557

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

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

milktea246

2022/05/12 14:14

ご指摘ありがとうございます。 ルーティングをネストしている際の記述の仕方がわからず、色々試していくうちにこのような状態になってしまいました。 form_for [@information,@detai]l local: true do |f| 最初、このような状態にしていたのですがnew.html.erbに遷移することが出来ず、 When assigning attributes, you must pass a hash as an argument, String passed. と表示されてしまっており、色々試していたところ、 ↓ form_for @information,@detail local: true do |f| form_for @detail local: true do |f| 最終的にこのような状態になってなってしまいました。
otn

2022/05/12 17:00

経緯は良いのですが、 > 上記は、どういう構文のつもりなのでしょう? の回答はどうなのでしょうか?
milktea246

2022/05/13 00:42

質問に沿った回答が出来ていなくて申し訳ございません。 テキストボックスを表示させるために記述しているつもりでした。
otn

2022/05/13 00:56

いや、意図を聞いているのでなくて、どういう構文のつもりだったかという質問なのですが。 a = 1 であれば、「名前aのローカル変数に対して数値の1を代入する」みたいな。
milktea246

2022/05/13 02:48

コントローラーで@detail = Detail.newとし、空のインスタンス変数を作ってcreateアクションに振り分けてくれるようにしています。 また、new.html.erbではコントローラーで代入した@detailを使って空のフォーム作成しようとしています。
otn

2022/05/13 12:30 編集

私の書いた例が悪かったです。意味を聞いているんじゃないです。 構文のエラー(syntax error,)なので、処理の意味は関係ありません。 a = 1 であれば、「a はローカル変数、= は代入演算子、1 は数値リテラル」と書くべきでした。 open(f, "w") であれば、「openはメソッド名、f はローカル変数でopenメソッドの第一引数、"w"は文字列リテラルでopenメソッドの第二引数」 と言うようなことを聞いています。 form_for @detail local: true do |f| であれば、form_for はメソッド名でしょうね。最後の f ブロック引数。 @detailはインスタンス変数で、おそらく、form_forメソッドの第一引数とすると、 第一引数の後にカンマ無しで続いている local: は何を意図した物か不明です。 カンマがあれば、local: true がハッシュリテラルでform_forメソッドの第二引数なのですが。
milktea246

2022/05/16 05:21

@detailの後にカンマが入っていなかったことで、syntax errorが出ていたのですね。 カンマをつけて、urlオプションを設定したところnew.html.erbのテキストボックスが表示されるようになりました! ありがとうございました!!今後もまたミスしていまいそうな部分なのでカンマに十分気をつけながらコードを書いていきたいと思います、
otn

2022/05/16 05:41 編集

「メソッドの各引数は、カンマで区切る」と言うことを知らなかったということでしょうか。 そこまでは想定できなかったので、カンマがないのは何らかの意図があってのことだと思いそれを質問していました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問