[RUBY] can't write unknown attribute `category_id` solved story

Since can't write unknown attribute category_id appeared when posting with the post function, I posted it for recording.

specification

https://qiita.com/cawaz3/items/e755a58177212f2aca6c Refer to this article for table structure etc. Implemented an intermediate table and linked the tag id at the time of posting.

Symptoms

It is set to transition to the post confirmation screen after describing the posted content on the posting screen, but it seems that the above error occurs and the transition does not work well.

Cause

Difference in column name In post.controller.rb, it was described as category_id, but when I checked the table, it was categories_id.

ruby:post.controller.rb


def confirm
    @post = Post.new(post_params)
    session[:category_ids] =  @post.category_ids
    return if @post.valid?
    flash.now[:alert] = 'There was a mistake in the input.'
    render :new
  end

  def back
    @post = Post.new(post_params)
    render :new
  end

  private

  def post_params
    params.require(:post).permit(:post_photo,
                                 :post_photo_cache,
                                 :place_name,
                                 :area,
                                 :street_address,
                                 :time,
                                 :regular_holiday,
                                 :url,
                                 :station,
                                 :shop_name,
                                 category_ids: []).merge(user_id: current_user.id )
  end
end

python


select * from post_category_relations;
 id | posts_id | categories_id | created_at | updated_at 
----+----------+---------------+------------+------------
(0 rows)

How to improve

Change the description of the model rails db: migrate: reset

python


class CreatePostCategoryRelations < ActiveRecord::Migration[5.2]
  def change
    create_table :post_category_relations do |t|
      t.references :post, foreign_key: true, null: false
      t.references :categories, foreign_key: true, null:false ⇦ before change
      t.references :category, foreign_key: true, null:false ⇦ after change
      t.timestamps
    end
  end
end

Recommended Posts

can't write unknown attribute `category_id` solved story
ActiveModel :: MissingAttributeError (can't write unknown attribute 〇〇) in Rails