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

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

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

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

Q&A

解決済

1回答

1685閲覧

カテゴリ選択をactive_hashを使って実装中に、ActionView::SyntaxErrorが発生し困っています。

yutaro_0529

総合スコア12

Ruby on Rails

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

0グッド

0クリップ

投稿2020/10/26 04:31

編集2020/10/27 14:59
  1. 番号リスト

前提・実現したいこと

新規投稿する際に、カテゴリ選択して投稿できるようにしたいです。

現在、twitterのようなWEBアプリケーションを作成しています。
まず仮で空欄のフォームに記述できるよう実装しました。
ですがカテゴリをactive_hashを利用して選択できるようにしたいと実装中にエラーの解説を教えていただきたいです。
このエラーまでにgemに 'active_hash'をbundle install して、
rails g model cotegory --skip-migrationを実行し、
カテゴリの実装を行いました。

新規投稿ビューを作成中に必要ないと考えていた、テーブルでエラーが発生していました。

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

ActionView::SyntaxErrorInTemplate in ItemsController#new Encountered a syntax error while rendering template: check <div class="contents row"> <div class="container"> <h3>投稿する</h3> <%= form_with(model: @item, local: true) do |form| %> <%= form.file_field :image %>    <%= form.text_area :text, placeholder: "text", rows: "10" %> <%# <%= form.text_field :category_id, placeholder: "cotegory" %> %> <%# このコードに変更するとエラーが発生 %>    <%= f.collection_select(:category_id, Category.all :id, :name, {}, {class:"category-select"}) %> <%= form.text_field :item_id, placeholder: "nostalgia" %> <%= form.submit "SEND" %> <% end %> </div> </div> <%# <%= f.collection_select(:genre_id, Genre.all, :id, :name, {}, {class:"genre-select"}) %> <%# <%= f.submit "投稿する" ,class:"btn" %> %> %> Extracted source (around line #9): <%# <%= form.text_field :category_id, placeholder: "cotegory" %> %> <%# このコードに変更するとエラーが発生 %>    <%= f.collection_select(:category_id, Category.all :id, :name, {}, {class:"category-select"}) %> <%= form.text_field :item_id, placeholder: "nostalgia" %> <%= form.submit "SEND" %> <% end %>

該当のソースコード

Ruby

1 2app/controllers/item_controller.rb 3class ItemsController < ApplicationController 4 before_action :set_item, only: [:edit, :show] 5 before_action :move_to_index, except: [:index, :show] 6 7 def index 8 @items = Item.includes(:user).sample(10) 9 end 10 11 def new 12 @item = Item.new 13 end 14 15 def create 16 Item.create(item_params) 17 end 18 19 def destroy 20 item = Item.find(params[:id]) 21 item.destroy 22 end 23 24 def edit 25 end 26 27 def update 28 item = Item.find(params[:id]) 29 item.update(item_params) 30 end 31 32 def show 33 end 34 35 def set_item 36 @item = Item.find(params[:id]) 37 end 38 39 private 40 def item_params 41 params.require(:item).permit(:image, :text ).merge(user_id: current_user.id) 42 # params.require(:item).permit(:image, :text :category_id).merge(user_id: current_user.id) 43 # 上記のコードだとSyntaxErrorが発生 44 end 45 46 def move_to_index 47 unless user_signed_in? 48 redirect_to action: :index 49 end 50 end 51end 52 53 54app/veiws/items/new.html.erb 55<div class="contents row"> 56 <div class="container"> 57 <h3>投稿する</h3> 58 <%= form_with(model: @item, local: true) do |form| %> 59 <%= form.file_field :image %> 60    <%= form.text_area :text, placeholder: "text", rows: "10" %> 61 <%# <%= form.text_field :category_id, placeholder: "cotegory" %> %> 62 <%# このコードに変更するとエラーが発生 %> 63 <%# 下記の前のコード<%= f.collection_select(:category_id, Category.all,{class:"select-box"}) %> 64    <%= f.collection_select(:category_id, Category.all :id, :name, {}, {class:"category-select"}) %> 65 <%= form.text_field :item_id, placeholder: "nostalgia" %> 66 <%= form.submit "SEND" %> 67 <% end %> 68 </div> 69</div> 70 71app/models/category.rb 72 73class Category < ActiveHash::Base 74 self.data = [ 75 { id: 0, name: '--' }, 76 { id: 1, name: 'アウター、ジャケット、コート' }, 77 { id: 2, name: 'ニット、スエット' }, 78 { id: 3, name: 'カットソー' }, 79 { id: 4, name: 'パンツ' }, 80 { id: 5, name: 'シューズ' }, 81 { id: 6, name: 'バック' }, 82 { id: 7, name: 'レザー小物' }, 83 { id: 8, name: 'アクセサリー' }, 84 { id: 9, name: 'キャップ' } 85 ] 86end 87 88app/models/item.rb 89 90class Item < ApplicationRecord 91 validates :text, presence: true 92 belongs_to :user 93 extend ActiveHash::Associations::ActiveRecordExtensions 94 belongs_to_active_hash :category 95 with_options numericality: { other_than: 0 } do 96 validates :text, :category_id, presence: true 97 end 98end

試したこと

コントローラーで問題が発生していると考え、
まず、paramsにcategory_idを承認しようとしました。
private
def item_params
params.require(:item).permit(:image, :text ).merge(user_id: current_user.id)
➡︎params.require(:item).permit(:image, :text :category_id).merge(user_id: current
_user.id)
➡︎上記のコードだとSyntaxErrorが発生
end

その後、ビューも完成していないため、
<%= f.collection_select(:category_id, Category.all,{class:"select-box"}) %>
上記のコードから下記へ修正:id, :name, {}, を追加
%= f.collection_select(:category_id, Category.all :id, :name, {}, {class:"category-select"}) %>

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

erb

<%# <%= form.text_field :category_id, placeholder: "cotegory" %> %>

erb

1<%# <%= form.text_field :category_id, placeholder: "cotegory" %>

までがコメントアウトされますが、

erb

1 %>

だけは残りますので、これが原因でSyntaxErrorが発生しているのではないでしょうか?

投稿2020/10/28 06:34

Mugheart

総合スコア2342

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

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

yutaro_0529

2020/10/30 15:39

いつもご回答ありがとうございます。 気がつけていなかったです! 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問