前提・実現したいこと
メッセージを画像や動画と共に投稿するアプリケーションを開発してます。
新規投稿機能、詳細機能、編集機能、削除機能と一通り実装した後
タグ機能を追加実装した際にFormオブジェクトを用いて実装した後
編集機能でNoMethodErrorが発生するようになりました。
編集を完了させるにはどうすればよろしいでしょうか?
よろしくお願いします。
発生している問題・エラーメッセージ
NoMethodError in MessagesController#update undefined method `update' for MessageTag:Class
該当のソースコード
messagescontroller
message_tab.rb(Formオブジェクト) class MessageTag include ActiveModel::Model include ActiveModel::Attributes include ActiveRecord::AttributeAssignment attr_accessor :title, :whom, :open_plan, :message, :images, :video, :name, :user_id with_options presence: true, length: { maximum: 50 } do validates :title validates :whom end with_options presence: true do validates :message, length: { maximum: 200 } validates :open_plan validates :user_id validates :name, length: { maximum: 20 } end def save @message = Message.create(title: title, whom: whom, open_plan: open_plan, message: message, images: images, video: video, user_id: user_id) tag = Tag.find_or_create_by(name: name) MessageTagForm.create(message_id: message.id, tag_id: tag.id) end def updateupdate @message = Message.find(params[:id]) @message = Message.create(title: title, whom: whom, open_plan: open_plan, message: message, images: images, video: video, user_id: user_id) tag = Tag.find_or_create_by(name: name) if MessageTagForm.update(message_id: message.id, tag_id: tag.id) return redirect_to root_path else render :edit end end end
edit
1<div class="new-message"> 2 <h1>残したい想い</h1> 3 <%= form_with model: @message, local: true do |f| %> 4 <%= render 'shared/error_messages', model: f.object %> 5 <div class="posting-form"> 6 <div class="form"> 7 タイトル 8 <span class="indispensable">必須</span> 9 </div> 10 <%= f.text_field :title, class:"form-title", id:"form-title", placeholder:"タイトル名(必須 50文字以内)", maxlength:"50" %> 11 <div class="form"> 12 メッセージ 13 <span class="indispensable">必須</span> 14 </div> 15 <%= f.text_area :message, class:"form-message", id:"form-message", placeholder:"メッセージ内容(必須 200文字以内)例)20年後の子供の誕生日に見て欲しい動画です。" ,rows:"5", maxlength:"200" %> 16 <div class="form"> 17 誰に対してか 18 <span class="indispensable">必須</span> 19 </div> 20 <%= f.text_field :whom, class:"form-whom", id:"form-whom", placeholder:"誰に宛てたものか(必須 50文字以内)例)20年後の子どもたちへ", maxlength:"50" %> 21 <div class="form"> 22 開封予定日 23 <span class="indispensable">必須</span> 24 </div> 25 <div class="form-open-plan"> 26 <%= raw sprintf( 27 f.date_select( 28 :open_plan, 29 class: 'open-plan-object', 30 use_month_numbers: true, 31 prompt:'--', 32 start_year: (Time.now.year), 33 end_year: (Time.now.year + 100), 34 date_separator: '%s'), 35 "<p> 年 </p>", "<p> 月 </p>") + "<p> 日 </p>" %> 36 </div> 37 <div class="form-caution"> 38 ※※※画像か動画どちらか1つの投稿にしてください。※※※ 39 </div> 40 <div class="image-form"> 41 <div class="form"> 42 届ける想い(画像) 43 </div> 44 <div class="click-upload"> 45 <p>クリックしてファイルをアップロード</p> 46 <%= f.file_field :images, name: 'message_tag[images][]', id:"form-image" %> 47 <div id="image-list"></div> 48 </div> 49 </div> 50 <div class="video-form"> 51 <div class="form"> 52 届ける想い(動画) 53 </div> 54 <div class="click-upload"> 55 <p>クリックしてファイルをアップロード</p> 56 <%= f.file_field :video, id:"form-video" %> 57 </div> 58 </div> 59 <div class="tag-form"> 60 タグ 61 </div> 62 <%= f.text_field :name, id:"form-tag", placeholder:"誕生日", maxlength:"20"%> 63 </div> 64 <div class="message-btn-contents"> 65 <%= f.submit "想いを更新する" ,class:"message-btn" %> 66 <%= link_to 'もどる', root_path, class:"back-btn" %> 67 </div> 68 <% end %> 69 70</div>
35: def update 36: @message = Message.find(params[:id]) => 37: binding.pry 38: @message = MessageTag.update(message_params) 39: end [1] pry(#<MessagesController>)> params => <ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"IpLwOPQlpeuAei8d+q0w6Q0kR57su7EmX9hk+ClskjYHMY13RNcdjwLDDqQv2Y+yxu59jGjfFS9gj7DMfuqLAQ==", "message"=>{"title"=>"アイウエオ", "message"=>"更新", "whom"=>"さしすせそ", "open_plan(1i)"=>"2022", "open_plan(2i)"=>"2", "open_plan(3i)"=>"2", "name"=>"更新"}, "commit"=>"想いを更新する", "controller"=>"messages", "action"=>"update", "id"=>"87"} permitted: false> [2] pry(#<MessagesController>)> message_params => <ActionController::Parameters {"title"=>"アイウエオ", "whom"=>"さしすせそ", "message"=>"更新", "open_plan(1i)"=>"2022", "open_plan(2i)"=>"2", "open_plan(3i)"=>"2", "name"=>"更新", "user_id"=>1} permitted: true>
試したこと
message_tagにupdateが未定義となっているのでmessage_tagにupdateを定義しましたが更新できませんでした
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。