前提・実現したいこと
railsにて個人アプリを開発しています。
deviseを使用して投稿内容作成ページから必要なフォームを入力し投稿ボタンをクリックすると投稿ができる処理を書いているのですが、
その中の雇用形態の項目をgem 'active_hash'にて管理してます。
発生している問題・エラーメッセージ
NoMethodError in Products#new undefined method `employment_status_id' for #<Job:0x00007f8b25f77210> Did you mean? employment_status employment_status= employment_status? employment_status_was
該当のソースコード
new.html.haml
1 .products__main__name 2 雇用形態 3 %span 必須 4 = form.collection_select :employment_status, EmploymentStatus.all, :id, :name, class: 'products__detail__status__box'
該当のソースコード
Jobcontroller
1 class JobsController < ApplicationController 2 before_action :authenticate_user!, except: [:index, :show] 3 before_action :set_job,only: [:show] 4 before_action :move_to_signin, except: [:index, :edit, :update] 5 before_action :limit_editer, only: [:edit, :update] 6 7 def index 8 @jobs = Job.all.order('id DESC').limit(10) 9 end 10 11 def new 12 @job = Job.new 13 @job.images.new 14 end 15 16 def create 17 @job = Job.new(job_params) 18 if @job.save 19 redirect_to root_path notice: "登録に成功しました" 20 else 21 @job.images.new 22 render :new 23 end 24 end 25 26 def edit 27 @job = Job.find(params[:id]) 28 end 29 30 def update 31 @job = Job.find(params[:id]) 32 if @job.update(job_update_params) 33 redirect_to root_path 34 else 35 render :edit 36 end 37 end 38 39 def destroy 40 end 41 42 private 43 44 def job_params 45 params.require(:job).permit(:occupation, :Posting_end_date, :employment_status_id, :job_description, :qualification, :salary, :treatment, :working_hours, :holiday, :work_location, :application_method, :contact, :location, :phone, :contact_name, :hp_address, :stop_id, :end_id, images_attributes: [:image]).merge(start_id: current_user.id) 46 end 47 48 def job_update_params 49 params.require(:job).permit(:occupation, :Posting_end_date, :employment_status_id, :job_description, :qualification, :salary, :treatment, :working_hours, :holiday, :work_location, :application_method, :contact, :location, :phone, :contact_name, :hp_address, :stop_id, :end_id, images_attributes:[:image, :_destroy, :id]) 50 end 51 52 def move_to_signin 53 redirect_to '/users/sign_in' unless user_signed_in? 54 end 55 56 def limit_editer 57 unless Job.find(params[:id]).start_id.to_i == current_user.id 58 redirect_to root_path 59 end 60 end 61 62end 63
該当のソースコード
employment_status_id.rb
1class EmploymentStatusId < ActiveHash::Base 2 self.data = [ 3 {id: 0, name: '選択してください'}, 4 {id: 1, name: '正社員'}, {id: 2, name: '契約社員'}, {id: 3, name: '派遣社員'}, 5 {id: 4, name: 'パート/アルバイト'}, {id: 5, name: '業務委託'}, {id: 6, name: '業務請負'}, {id: 7, name: '登録'}, {id: 8, name: '期間従業員'}, {id: 9, name: '紹介予定派遣'}, {id: 10, name: '準社員'}, {id: 11, name: '嘱託'}, {id: 12, name: '開業'}, {id: 13, name: '在宅/内職'} 6 ] 7 include ActiveHash::Associations 8 # has_many :jobs 9end 10
試したこと
all.recordでemployment_statusモデルに設定しているid、とnameに該当する値が全て取得できていることを確認。
= form.collection_select :employment_status, EmploymentStatus.all, :id, :name, class: 'products__detail__status__box'のemployment_status部分をEmployment_Statusに変更すると投稿内容作成ページにてemployment_statusモデルに設定している値がviewに表示されていることを確認するも投稿するボタンをクリックするとNoMethodError in JobsController#create
undefined method `employment_status_id' for #Job:0x00007f8b27b00540 Did you mean? employment_status employment_status= employment_status? employment_status_was
というエラーが出てしまい投稿できません。
mysqlのテーブルにはjobsテーブルにemployment_statusというカラム名で登録していることも確認しております。
恐らくhamlの書き方がおかしい可能性があるのではないかと思われますが書き方を色々変えてもダメでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/13 04:05
2020/08/14 08:55
2020/08/14 11:20
2020/08/15 08:18