イベント投稿アプリを作っているのですが、タグ機能を実装した後データベースに保存されません。
参考コード
イベントコントローラー
def index @tag_list = Tag.all @events = Event.all @event = current_user.events.new end def new @event = Event.new end def create # binding.pry @event = Event.new(event_params) #binding.pry if @event.save #binding.pry tag_list = tag_params[:tag_names].delete(" ").split(",") @event.save_tags(tag_list) redirect_to root_path else render 'new' end end private def event_params params.require(:event).permit(:name, :explanation, :facility_id, :scale_id, :category_id, :volunteer, images: []).merge(user_id: current_user.id) end def tag_params params.require(:event).permit(:tag_names) end
イベントモデル
class Event < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :user has_many_attached :images belongs_to :facility belongs_to :scale belongs_to :category has_many :event_tag_relations, dependent: :destroy has_many :tags, through: :event_tag_relations, dependent: :destroy has_many :comments, dependent: :destroy def save_tags(tag_list) #binding.pry tag_list.each do |tag| unless find_tag = Tag.find_by(tag_name: tag.downcase) begin self.tags.create!(tag_name: tag) rescue nil end else EventTagRelation.create!(event_id: self.id, tag_id: find_tag.id) end end end ```タグモデル ```ここに言語を入力 class Tag < ApplicationRecord has_many :event_tag_relations, dependent: :destroy has_many :events, through: :event_tag_relations, dependent: :destroy validates :tagname, uniqueness: true validates :tag_name, presence: true, uniqueness: true end
新規登録ビュー
<%= form_with model: @event, url: events_path, local: true do |f| %> <%= render 'shared/error_messages', model: f.object %> <div class="field"> <label class="label">イベント名</label> <%= f.text_field :name, class: :form_control %> </div> <div class="field", id='tag-field'> <label class="label">タグ</label> <%= f.text_field :tag_names, class:"input-tag" %> </div> <div class="kouho", id="search-result" > </div> ```### 行った事 saveメソッドの後にbinding.pryでparamsを確認しましたら ```ここに言語を入力 <ActionController::Parameters {"authenticity_token"=>"zJzUCe4RFWoSTgLeXk64nRjg9Db7BuoC6ZBZkh/1RaRvqyCH5BHfdbB6iScb5n+JGEYk9vpEanaf/Kh5MwUFgQ==", "event"=><ActionController::Parameters {"name"=>"aaa", "explanation"=>"aaaa", "volunteer"=>"", "tag_names"=>"s,aaaa,rrrrr", "facility_id"=>"2", "scale_id"=>"3", "category_id"=>"2"} permitted: false>, "commit"=>"保存する", "controller"=>"events", "action"=>"create"} permitted: false> [2] pry(#<EventsController>)> @event.save => true ```とsaveメソッドが動いているのが確認できましたがデータベースに反映されません。どこが原因なのかわからない為アドバイスいただけたらと思います ### 追記 イベントモデル ```ここに言語を入力 def save_tags(tag_list) 26: #binding.pry 27: tag_list.each do |tag| 28: unless find_tag = Tag.find_by(tag_name: tag.downcase) => 29: binding.pry 30: # binding.pry 31: # begin 32: # self.tags.create!(tag_name: tag) 33: 34: # rescue 35: # nil 36: # end 37: # else 38: # EventTagRelation.create!(event_id: self.id, tag_ids: find_tag.id) 39: # binding.pry 40: end 41: end 42: end ```pry内容 ```ここに言語を入力 [1] pry(#<Event>)> tag_name NameError: undefined local variable or method `tag_name' for #<Event:0x00007fee549252d0> from /Users/user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.3.4/lib/active_model/attribute_methods.rb:432:in `method_missing' [2] pry(#<Event>)> tag.downcase => "s" ```タグには「s,aaaa,rrrrr」と入力しました
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。