programmerOKADA
@programmerOKADA (岡田)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SyntaxErrorが解決できません…

解決したいこと

前回投稿したルーティングエラーを直したら次はSyntaxError が出てきました。しかしルーティングエラーの時から誤字脱字はできる限り探していたのでなぜこうなったのか…

Ruby on RailsでECサイトをつくっています。
ページがちゃんと作られているのか確認しようとURLを打ち込み遷移しようとしたら以下のエラーが発生しました。
解決方法を教えて下さい。

発生している問題・エラー

SyntaxError in Admin::CustomersController#index
Extracted source (around line #26):
24
25
26
<td><%= if customer.is_deleted == false %>
    有効
    <% else %>
    無効
</td>

現在の記述

routes.rb

Rails.application.routes.draw do

  root 'homes#top'

  devise_for :admins

  get 'about' => 'homes#about', as: 'about'

  # 管理者側のルーティング設定
  namespace :admin do
    resources :order_details, only: :update
    resources :orders, only: [:index, :show, :update]
    resources :categories, only: [:index, :create, :edit, :update]
    resources :customers, only: [:index, :show, :edit, :update]
    resources :items, except: :destroy
  end

  #会員側のルーティング設定
  resources :addresses, except: [:show, :new]

  resources :orders, except: [:edit, :update, :destroy]
  get 'orders/confirm' => 'orders#confirm', as: 'confirm'
  get 'orders/complete' => 'orders#complete', as: 'complete'

  resources :cart_items, except: [:show, :new, :edit]
  delete '/:id' => 'cart_items#all_destroy'

  resources :items, only: [:index, :show]

  resources :customers, only: [:show, :edit, :update]
  get 'customers/unsubscribe' => 'customers#unsubscribe', as: 'unsubscribe'
  patch '/' => 'customers#out'

end

customers_controller.rb

class Admin::CustomersController < ApplicationController
  before_action :authenticate_admin!


  def index
    # kaminariを使用するための記述
    @customers = Customer.page(params[:page]).per(10)
  end

  def show
  end

  def edit
  end

  def update
  end

  private

  def customer_params
    params.require(:customer).permit(:last_name, :first_name, :last_name_kana, :first_name_kana, :postcode, :address, :phone_number, :email, :is_deleted)
  end

end

customers/index.html.erb

<div class=“row”>

    <h2>会員一覧</h2>

    <table class='table'>

      <thead>
        <tr>
          <th>会員ID</th>
          <th>氏名</th>
          <th>メールアドレス</th>
          <th>ステータス</th>
        </tr>
      </thead>

      <tbody>
        <% @customers.each do |customer| %>
          <tr>
            <td><%= customer.id %></td>
            <td class="style">
              <!--フルネームにするための記述-->
              <%= link_to customer.first_name, admin_customers_path(customer.id) %>
              <%= link_to customer.last_name, admin_customers_path(customer.id) %>
            </td>
            <td><%= customer.email %></td>
            <td><%= if customer.is_deleted == false %>
                有効
                <% else %>
                無効
                <% end %>
            </td>
          </tr>
        <% end %>
        <!--kaminariを使用するための記述-->
        <%= paginate @customers %>
      </tbody>
    </table>

</div>

直すべき箇所すら分からず

実査にsyntaxerrorが起こるときは誤字や脱字など、単純な問題が多いと思っているのですが、確認してもしても自分では見当たらず、結果的にエラー表記通り<%= if customer.is_deleted == false %>の記述の仕方がおかしいのか?と考えましたが自分ではここまで考えるのが今の限界ですので質問させていただきました。

どばたか分かる方いらっしゃいましたらご教授お願いいたします。

0

1Answer

if の前の <%=<% に直してください。

<%= ... %> タグは、 ... 部分のコードを評価した値をその場に埋め込みます。
<%= customer.email %> はメールアドレスを埋め込むし、 <%= 1 + 2 %> は3を埋め込むわけですね。

一方で if customer.is_deleted == false は if 文の一部分でしかなく、これだけでは値を返すコードになりません。なので <%= ... %> タグの中には書けません。


以上はこちらで回答したコメントの転載です https://qiita.com/programmerA/questions/b6d8c58db2b0c600b3f5

1Like

Comments

  1. =を消した後、コントローラーに記述されているbefore_action :authenticate_admin!をコメントアウトしたらページが表示できました!

Your answer might help someone💌