前提・実現したいこと
WEB幹事やhomesのように都道府県の一覧ページがあり、各都道府県に会社の情報を持たせたいと考えています。
都道府県をリンクにして、持たせたデータを一覧で表示させる感じです。
都道府県はPrefectureモデルで各データはCompanyモデルとしています。
PrefectureとCompanyモデルは1対Nでアソシエーションを組んでます。
会社情報の送信時にエラーが出現してしまい、controllerにどのように記述すればPrefectureのidを取得できるのかわかりませんでした。
都道府県情報はPrefectureモデルにenumで記述しています。
データ自体はseedsに直接記述しています。
エラーメッセージ以外にも設計について、こうした方が良いなどありましたらご教示ください。
発生している問題・エラーメッセージ
Couldn't find Prefecture without an ID
該当のソースコード
Prefecture.index
<%= form_for(@company ,url: admins_companies_path) do |f| %> <%# <%= f.hidden_field :prefecture_id ,:value => @prefectures.id %> <div class="company-post__title"> <h2>掲載企業を追加</h2> </div> <div class="company-post__prefectures"> <p>都道府県を選択</p> <%= f.select :prefecture_id, Prefecture.prefecture_names %> <%# <%= f.select :prefecture_id, options_for_select(Prefecture.prefecture_names) %> <p>会社名を記入</p> <%= f.text_field :company_name %> <p>説明文を記入</p> <%= f.text_area :description %> <div> <%= f.attachment_field :image %> </div> </div> <%= f.submit 'Create Company' %> <% end %>
class Admins::CompaniesController < ApplicationController def index end def show end def create @prefecture = Prefecture.find(params[:prefecture_id]) company = @prefecture.companies.new(company_params) # company.prefecture_id = @prefecture.id if company.save lash[:notice] = 'successfully' redirect_to admins_prefectures_path end end def edit end def updata end def destroy end private def company_params params.require(:company).permit(:company_name, :description, :image) end end
class Admins::PrefecturesController < ApplicationController def index @company = Company.new end def show @prefecture = Prefecture.find(params[:id]) @companies = @prefecture.companies end end
Prefecture.rb
class Prefecture < ApplicationRecord has_many :companies, dependent: :destroy enum prefecture_name:{ "---":0, 北海道:1,青森県:2,岩手県:3,宮城県:4,秋田県:5,山形県:6,福島県:7, 茨城県:8,栃木県:9,群馬県:10,埼玉県:11,千葉県:12,東京都:13,神奈川県:14, 新潟県:15,富山県:16,石川県:17,福井県:18,山梨県:19,長野県:20, 岐阜県:21,静岡県:22,愛知県:23,三重県:24, 滋賀県:25,京都府:26,大阪府:27,兵庫県:28,奈良県:29,和歌山県:30, 鳥取県:31,島根県:32,岡山県:33,広島県:34,山口県:35, 徳島県:36,香川県:37,愛媛県:38,高知県:39, 福岡県:40,佐賀県:41,長崎県:42,熊本県:43,大分県:44,宮崎県:45,鹿児島県:46, 沖縄県:47 } end
route
namespace :admins do resources :prefectures,only: [:index, :show, :create ] resources :companies end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/26 05:34
2020/11/26 13:54