前提・実現したいこと
ActiveHashを使ったシンプルな投稿アプリを作っています。
結論'投稿する'ボタンを押すとトップページに一覧を表示させたいのですが、
現在、全てのカテゴリーを選択した後に'投稿する'ボタンを押すとエラーが出てしまいます。
発生している問題・エラーメッセージ
NoMethodError in ActionsController#create undefined method `permit' for "create":String Extracted source (around line #24): 22 23 def action_params 24 params.require(:action).permit(:active_id, :place_id, :set_time_id, 25 :description).merge(user_id: current_user.id) 26 end 27 end
該当のソースコード
models/action.rb
class Action < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to_active_hash :active belongs_to_active_hash :place belongs_to_active_hash :set_time with_options numericality: { other_than: 0 } do validates :active_id validates :place_id validates :set_time_id end belongs_to :user end
該当のソースコード
models/active.rb
class Active < ActiveHash::Base self.data = [ {id: 0, name: '---'}, {id: 1, name: '読書'}, {id: 2, name: '筋トレ'}, {id: 3, name: 'ランニング'}, {id: 4, name: 'ウォーキング'}, {id: 5, name: 'プログラミング'}, {id: 6, name: '英会話'}, {id: 7, name: '勉強'}, {id: 8, name: '瞑想'}, {id: 9, name: '掃除'}, {id: 10, name: 'その他'} ] include ActiveHash::Associations has_many :actions end
該当のソースコード
models/place.rb
class Place < ActiveHash::Base self.data = [ {id: 0, name: '---'}, {id: 1, name: '自宅'}, {id: 2, name: '公園'}, {id: 3, name: 'ジム'}, {id: 4, name: '職場'}, {id: 5, name: '教室'}, {id: 6, name: 'カフェ'}, {id: 7, name: '図書館'}, {id: 8, name: '屋外'}, {id: 9, name: 'その他'} ] include ActiveHash::Associations has_many :actions end
該当のソースコード
models/routes.rb
Rails.application.routes.draw do devise_for :users root to: 'actions#index' resources :actions end
該当のソースコード
config/set_time.rb
class SetTime < ActiveHash::Base self.data = [ {id: 0, name: '---'}, {id: 1, name: '15分'}, {id: 2, name: '30分'}, {id: 3, name: '45分'}, {id: 4, name: '1時間00分'}, {id: 5, name: '1時間15分'}, {id: 6, name: '1時間30分'}, {id: 7, name: '1時間45分'}, {id: 8, name: '2時間00分'}, {id: 9, name: '2時間15分'}, {id: 10, name: '2時間30分'}, {id: 11, name: '2時間45分'}, {id: 12, name: '3時間00分'}, {id: 13, name: '3時間以上'} ] include ActiveHash::Associations has_many :actions end
該当のソースコード
actions_controller
class ActionsController < ApplicationController def index @actions = Action.all.order("created_at DESC") end def new @action = Action.new end def create @action = Action.new(action_params) if @action.save flash.notice = "投稿完了しました!" redirect_to root_path else render :new end end private def action_params params.require(:action).permit(:active_id, :place_id, :set_time_id, :description).merge(user_id: current_user.id) end end
該当のソースコード
views/actions/index.html.erb
<% @actions.each do |action| %> <div class="action"> <div class="action-active"> <%= action.active %> </div> <div class="action-place"> <%= action.place %> </div> <div class="action-time"> <%= action.set_time %> </div> <div class="action-description"> <%= action.description %> </div> <div class="action-date"> 投稿日時:<%= action.created_at %> </div> </div> <% end %>
views/actions/new.html.erb
<%= form_with model: @action, url: actions_path, local: true do |f| %> <div class="action-box"> <h2 class="action-plan">今日できたこと!!</h2> 何を? <%= f.collection_select(:active_id, Active.all, :id, :name, {}, {class:"active-select"}) %> どこで? <%= f.collection_select(:place_id, Place.all, :id, :name, {}, {class:"place-select"}) %> 何分? <%= f.collection_select(:set_time_id, SetTime.all, :id, :name, {}, {class:"set_time-select"}) %> メモ書き <%= f.text_area :description, class:"description", placeholder:"メモ" %> <%= f.submit "投稿する" ,class:"btn" %> </div> <% end %>
試したこと
記述ミスやparamsのところも確認したしましたが解決に至りませんでした。
初心者なのでいまいち構造が理解仕切れていない部分もありますが
お時間ある時にでも構いませんのでご教示お願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
https://qiita.com/km1994/questions/edc40f8ef67522bc22fa
以下ご対応ください。
https://teratail.com/help#posted-otherservice
かしこまりました。
あなたの回答
tips
プレビュー