Ruby on Rails 5.0.0.1
で開発しています。
Lesson
modelに関し、登録済みのデータをedit / update
する際に、もともと登録されていた値がデフォルトでセットされず、初期(new/create
)の時と同じ状態に戻ってしまいます。
options_from_collection_for_select
を利用しているprice
の部分のみこの現象が起きているので、ここに原因があるのだと思いますが、直し方がわからず、ご教示頂けますと幸甚です。
以下写真の様に、4,000円で登録しているのに、edit
に行くと
この様にデフォルトで4,000円が入らず、新規作成と同様の状態に戻ってしまう
ruby
1###Lesson model 2class Lesson < ApplicationRecord 3 4 validates :title, presence: true, length: {maximum: 50} 5 validates :price, :required_time, :makeupkit, :place, presence: true 6 validates :place_memo, presence: true, length: {maximum: 100} 7 validates :memo, presence: true, length: {maximum: 1000} 8 9 PRICE_LIST = { 10 "無料" => 0, "1,000円" => 1000, "1,500円" => 1500, "2,000円" => 2000, 11 "2,500円" => 2500, "3,000円" => 3000, "3,500円" => 3500, "4,000円" => 4000, 12 "4,500円" => 4500, "5,000円" => 5000, "6,000円" => 6000, "7,000円" =>7000, 13 "8,000円" => 8000, "9,000円" => 9000, "10,000円" => 10000, "11,000円" => 11000, 14 "12,000円" => 12000, "13,000円" => 13000, "14,000円" => 14000, 15 "15,000円" => 15000, "16,000円" => 16000, "17,000円" => 17000, "18,000円" => 18000, 16 "19,000円" => 19000, "20,000円" => 20000 17 } 18 19 PREFECTURE_NAMES = %w( 20 その他(コメント欄に記入) 21 北海道 22 青森県 岩手県 宮城県 秋田県 山形県 福島県 23 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 24 新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県 25 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 26 鳥取県 島根県 岡山県 広島県 山口県 27 徳島県 香川県 愛媛県 高知県 28 福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 29 沖縄県 30 ) 31 32end
ruby
1###_form.html.erb(newでもeditでも共通で利用) 2 <%= f.label :title, "レッスン名", class: "required" %> 3 <%= f.text_field :title, class:"form-control", placeholder:"例:目元が映えるメイク" %> 4 <%= f.label :price, "価格(¥)", class: "required" %> 5 <%= f.select :price, options_from_collection_for_select(Lesson::PRICE_LIST, :last, :first), {}, {class:"form-control"}%> 6 <%= f.label :place, "場所(都道府県)", class: "required"%> 7 <%= f.select :place, Lesson::PREFECTURE_NAMES, {}, {class:"form-control"} %>
ruby
1###controller 2class User::LessonsController < User::Base 3 4 def edit 5 @lesson = current_user.adviser.lessons.find(params[:id]) 6 t = 3 - @lesson.lesson_images.size.to_i 7 t.times{@lesson.lesson_images.build} 8 end 9 10 def update 11 @lesson = current_user.adviser.lessons.find(params[:id]) 12 @lesson.assign_attributes(lesson_params) 13 if @lesson.save 14 redirect_to [current_user, :user_lesson], notice: "レッスン内容をupdateしました。" 15 else 16 flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。' 17 render "edit" 18 end 19 end 20 21 private def lesson_params 22 attrs = [ 23 :id, 24 :adviser_id, 25 :title, :price, :required_time, :makeupkit, 26 :makeupkit_explain, :place, :place_memo, :memo, :posted_at, 27 :file, :tag_list, :genre_list, 28 lesson_images_attributes:[:id, :lesson_id, :lesson_image, :lesson_image_cache, :remove_lesson_image], 29 situation_ids:[], part_ids:[] 30 ] 31 params.require(:lesson).permit(attrs) 32 end 33 34 35end 36
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/06 04:43
2017/07/06 07:52
2017/07/06 10:02
2017/07/06 10:44
2017/07/06 11:39 編集