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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

1211閲覧

【rails】アクティブハッシュで設定した雇用形態を使用するとNoMethodErrorとなる

sk48801728

総合スコア12

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2020/08/11 00:58

編集2020/08/13 04:04

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

= form.collection_select :employment_status_id, EmploymentStatus.all, :id, :name, class: 'products__detail__status__box'

= form.collection_select :カラム名
のイメージです

モデル名
EmploymentStatus

投稿2020/08/12 21:56

編集2020/08/13 10:34
nasuk47

総合スコア311

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

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

sk48801728

2020/08/13 04:05

controller、modelファイルのコードを追記いたしました。
sk48801728

2020/08/14 08:55

カラム名はマイグレーションファイルおよびDBでもemployment_status_idとなっております。
nasuk47

2020/08/14 11:20

なのでemployment_status_idを送ればいいのでは 今はemployment_statusを送っていませんか?
sk48801728

2020/08/15 08:18

すみませんemploymentに書き換えたら解決いたしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問