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

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

ただいまの
回答率

89.08%

<Ruby> {や(が必要ないところでsyntax error, unexpected keyword_class, expecting keyword_do or '{' or '(' が出てしまい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 280

jime

score 10

rubyでオリジナルアプリを作っているのですが

SyntaxError in PostsController#index
/Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:18: syntax error, unexpected keyword_class, expecting keyword_do or '{' or '(' ...fe_append=' <a class="main-btn1" href="/signup" >... ... ^~~~~ /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:18: syntax error, unexpected tIDENTIFIER, expecting ')' ... <a class="main-btn1" href="/signup" >新規登録は... ... ^~~~ /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:19: unknown regexp options - lg /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:19: syntax error, unexpected tSTRING_BEG, expecting ')' ...class="main-btn2" href="/login" >メールアドレスでロ... ... ^ /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:20: syntax error, unexpected tIDENTIFIER, expecting ')' <a class="main-btn3" href="/auth/twitter" >... ^~~~ /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:20: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' ... <a class="main-btn3" href="/auth/twitter" >Twitte... ... ^ /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:20: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' ...main-btn3" href="/auth/twitter" >Twitterでログイン</a> ... ^ /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:32: unterminated string meets end of file end ^ /Users/kuritahajime/pile_up_app/app/views/posts/index.html.erb:32: syntax error, unexpected end-of-input, expecting ')' end ^


というエラーが出てしまっています

unexpected keyword_class, expecting keyword_do or '{' or '('


の部分は{や(がないという類のエラーなのだと思いますが、後述のコードからも分かる通り{や(は必要ないかと思います

また

 unexpected tSTRING_BEG, expecting ')' 


は、調べてみたところ全角の空白があったり空白が足りなかったりすると出るようなのですが確認したところ全角の空白もありませんし、空白が必要なところに空白がないという状態にもなっていないかと思います

該当のソースコード

**posts/index.html**

    <div class="main-wrapper">
      <div class="cont">
        <div class="main-wrapper-main">
          <div class="main-title">
           <h1>ピラプ</h1>
           <p>あなたの頑張りを可視化するアプリケーション</p>
          </div>
          <div class="main-btn">

            <% if @current_user %>
            <a class="main-btn1" href="/posts/new" >新規投稿</a>
            <a class="main-btn2" href="/users/<%= #{user.id} %>" >マイページ</a>

            <% else %>
            <a class="main-btn1" href="/signup" >新規登録はこちらから</a>
            <a class="main-btn2" href="/login" >メールアドレスでログイン</a>
            <a class="main-btn3" href="/auth/twitter" >Twitterでログイン</a>
            <% end %>

          </div>
        </div>
      </div>
    </div>
**route.rb**

Rails.application.routes.draw do
  post "login" => "users#login"
  #OK
  get "login" => "users#login_form"
  #OK
  post "logout" => "users#logout"
  post "users/:id/update" => "users#update"
  get "users/:id/edit" => "users#edit"

  post "users/create" => "users#create"

  #OK
  get "signup" => "users#new"

  #OK
  get "users/:id" => "users#show"

  get "posts/index" => "posts#index"

  get "posts/new" => "posts#new"
  get "posts/:id" => "posts#show"
  post "posts/create" => "posts#create"

  get "posts/:id/edit" => "posts#edit"
  post "posts/:id/update" => "posts#update"
  post "posts/:id/destroy" =>"posts#destroy"
  get "/" => "home#top"
  #OK
  get "about" => "home#about"
  #OK
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html




  get 'auth/:provider/callback' => 'users#creates'
  root 'home#top'


end
**controllers/posts_contoroller**

class PostsController < ApplicationController

  before_action :authenticate_user

  before_action :ensure_correct_user,{only:[:edit,:update,:destroy]}

  def index
    @post = Post.all.order(created_at: :desc)
  end

  def show
    @post = Post.find_by(id: params[:id])
  end


  def new
    @post = Post.new
  end




  def create
    @post = Post.new(
      content: params[:content],
      type: params[:type],
      time: params[:time],
      user_id: @current_user.id
    )


    if @post.save
      redirect_to("/users/#{@current_user.id}")
    else
      render("posts/new")
    end
  end



  def edit
    @post = Post.find_by(id: params[:id])
  end

  def update
    @post = Post.find_by(id: params[:id])
    @post.content = params[:content]
    @post.content = params.permit(:content)[:content]
    @post.time = params.permit(:time)[:time]
    @post.type = params.permit(:type)[:type]

    if @post.save
      redirect_to("/users/#{@current_user.id}")

    else
      render("posts/edit")
    end
  end

  def destroy
    @post = Post.find_by(id: params[:id])
    @post.destroy
    redirect_to("/users/#{@current_user.id}")
  end



  def ensure_correct_user
    @post = Post.find_by(id: params[:id])
    if @post.user_id != @current_user.id
      flash[:notice]= "権限がありません"
      redirect_to("/posts/index")
    end
  end

end

エラーの出ている18行目というのは

<a class="main-btn1" href="/signup" >新規登録はこちらから</a>


の部分です

試したこと

先述した通り、空白の過不足は確認しましたが見当たりませんでした

また

<a class="main-btn2" href="/users/#{user.id}" >マイページ</a>


の部分を取り除くとエラーは出なくなります

この問題についてお分かりになられる方がいらっしゃいましたらアドバイスよろしくお願いいたしたます

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • Y.H.

    2020/03/09 22:39

    質問のコードが編集されましたが、
    このコードで
    「SyntaxError in PostsController#index.....」
    のエラーが出ているのでしょうか?
    一度質問を整理された方が良いです。
    状況が判らないので回答付かないと思いますよ。

    キャンセル

  • jime

    2020/03/10 11:50

    Y.H.様
    このコードで「SyntaxError in PostsController#index.....」が出ます

    キャンセル

  • Y.H.

    2020/03/10 11:53

    ryoya1122さんの回答へのコメントに記載されている以下と異なるのですが
    どちらが正しいのですか?
    > も試してみたのですが
    > NameError in Posts#index
    > というエラーが出てしまいます

    キャンセル

回答 3

+1

#{user.id}#は、コメントの開始記号ですね。引用符の中に式を書くことと混同しているのでは?
正しくはuser.idですね。

erb -xで、Rubyコードを出力してみましたが、そのまま、

~~~; _erbout.<<(( #{user.id} ).to_s); ~~~


に変換されるようで、この#以降がコメントとみなされて、((が閉じないまま次の行に続くので、エラーメッセージが出ます。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/03/10 12:01

    ご回答いただきありがとうございます

    アドバイスいただいと通り#を取り除いたのですがエラーは消えませんでした(この回答に対するぼくの解釈が間違っていたらすみません)

    キャンセル

  • 2020/03/10 12:59

    #{ }を取り除きます。

    #だけ取り除いたということは、#{ } の記法についても意味をご存じなかったということですか?
    書いた以上、そこは当然知っているものと思いました。

    キャンセル

checkベストアンサー

0

<a class="main-btn2" href="/users/<%= #{user.id} %>" >マイページ</a>

の部分をこう変えるとよさそうです

<a class="main-btn2" href="/users/<%= @current_user.id %>" >マイページ</a>

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/03/10 12:02

    ご回答いただきありがとうございます

    アドバイスいただいと通り修正した結果エラーが解消されました

    キャンセル

0

railsのerbですか?
erbのビュー内で書きたいのであれば

<a class="main-btn2" href="/users/<%= user.id %>" >マイページ</a>

という記述でどうでしょうか?

それとその記述を使いたいのであれば
<%= link_to "マイページ", "/users/#{user.id}", class: 'main-btn2' %>
とするのが正解だと思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/03/09 22:01

    ご回答いただきありがとうございます
    <a class="main-btn2" href="/users/<%= user.id %>" >マイページ</a>

    <%= link_to "マイページ", "/users/#{user.id}", class: 'main-btn2' %>
    も試してみたのですが
    NameError in Posts#index
    というエラーが出てしまいます

    キャンセル

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

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

関連した質問

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

  • トップ
  • Rubyに関する質問
  • <Ruby> {や(が必要ないところでsyntax error, unexpected keyword_class, expecting keyword_do or '{' or '(' が出てしまい