前提・実現したいこと
Tagモデル、ListモデルをTagListモデルを中間テーブルとして関連付けしています。
ログイン中のユーザーの作成したもののみをtag_lists_controllerで@tag_lists = TagList.where(user_id: current_user.id)とすることでtaglistsの一覧ページで表示させたいのですが、
コマンドラインで確認したところTagList.user_idがnilになっているためうまくできません。
なので、今回実現したいことはTagList.user_idにcurrent_user.idを代入できるようにすることです。
各テーブルのカラムは以下のようになっています。
Ruby
1create_table "tags", force: :cascade do |t| 2 t.string "content" 3 t.datetime "created_at", null: false 4 t.datetime "updated_at", null: false 5 t.integer "user_id" 6end 7 8create_table "lists", force: :cascade do |t| 9 t.string "content" 10 t.datetime "created_at", null: false 11 t.datetime "updated_at", null: false 12 t.integer "user_id" 13 t.date "start_time" 14end 15 16create_table "tag_lists", force: :cascade do |t| 17 t.integer "tag_id" 18 t.integer "list_id" 19 t.datetime "created_at", null: false 20 t.datetime "updated_at", null: false 21 t.integer "user_id" 22 t.index ["list_id"], name: "index_tag_lists_on_list_id" 23 t.index ["tag_id"], name: "index_tag_lists_on_tag_id" 24end 25 26create_table "users", force: :cascade do |t| 27 t.string "email", default: "", null: false 28 t.string "encrypted_password", default: "", null: false 29 t.string "reset_password_token" 30 t.datetime "reset_password_sent_at" 31 t.datetime "remember_created_at" 32 t.datetime "created_at", null: false 33 t.datetime "updated_at", null: false 34 t.index ["email"], name: "index_users_on_email", unique: true 35 t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 36end 37
また、各モデルのアソシエーションは以下のようになっています。
Ruby
1class Tag < ApplicationRecord 2 belongs_to :user, optional: true 3 has_many :tag_lists, dependent: :destroy 4 has_many :lists, :through => :tag_lists 5end 6 7class List < ApplicationRecord 8 belongs_to :user, optional: true 9 has_many :tag_lists, dependent: :destroy 10 has_many :tags, :through => :tag_lists 11end 12 13class TagList < ApplicationRecord 14 belongs_to :user, optional: true 15 belongs_to :tag, optional: true 16 belongs_to :list, optional: true 17end 18 19class User < ApplicationRecord 20 has_many :diaries 21 has_many :tags 22 has_many :lists 23 has_many :tag_lists 24end
発生している問題・エラーメッセージ
エラーメッセージは表示されていません。
コマンドラインでrails cをしてTagList.allと入力するとuser_id: nilと表示されます。
本来はこのnilの部分にcurrent_user.id(ログイン中のユーザーのid)が入るようにしたいです。
該当のソースコード
Ruby
1class TagListsController < ApplicationController 2 before_action :set_tag_list, only: [:show, :edit, :update, :destroy] 3 4 def index 5 @tag_lists = TagList.where(user_id: current_user.id) 6 end 7 8 # GET /tag_lists/1 9 # GET /tag_lists/1.json 10 def show 11 end 12 13 # GET /tag_lists/new 14 def new 15 @tag_list = TagList.new 16 end 17 18 # GET /tag_lists/1/edit 19 def edit 20 end 21 22 # POST /tag_lists 23 # POST /tag_lists.json 24 def create 25 @tag_list = TagList.new(tag_list_params) 26 27 @tag_list.user_id = current_user.id 28 #@tag_list.user_id = tag_list.list.user_id 29 30 respond_to do |format| 31 if @tag_list.save 32 format.html { redirect_to @tag_list, notice: 'Tag list was successfully created.' } 33 format.json { render :show, status: :created, location: @tag_list } 34 else 35 format.html { render :new } 36 format.json { render json: @tag_list.errors, status: :unprocessable_entity } 37 end 38 end 39 end 40 41 # PATCH/PUT /tag_lists/1 42 # PATCH/PUT /tag_lists/1.json 43 def update 44 respond_to do |format| 45 if @tag_list.update(tag_list_params) 46 format.html { redirect_to @tag_list, notice: 'Tag list was successfully updated.' } 47 format.json { render :show, status: :ok, location: @tag_list } 48 else 49 format.html { render :edit } 50 format.json { render json: @tag_list.errors, status: :unprocessable_entity } 51 end 52 end 53 end 54 55 # DELETE /tag_lists/1 56 # DELETE /tag_lists/1.json 57 def destroy 58 @tag_list.destroy 59 respond_to do |format| 60 format.html { redirect_to tag_lists_url, notice: 'Tag list was successfully destroyed.' } 61 format.json { head :no_content } 62 end 63 end 64 65 private 66 # Use callbacks to share common setup or constraints between actions. 67 def set_tag_list 68 @tag_list = TagList.find(params[:id]) 69 end 70 71 # Never trust parameters from the scary internet, only allow the white list through. 72 def tag_list_params 73 params.require(:tag_list).permit(:tag_id, :list_id) 74 end 75end
Ruby
1class ListsController < ApplicationController 2before_action :set_list, only: [:show, :edit, :update, :destroy] 3 4# GET /lists 5# GET /lists.json 6def index 7 8#@list = List.find(params[:id]) 9 10@lists= List.where(user_id: current_user.id).order("start_time ASC") 11end 12 13# GET /lists/1 14# GET /lists/1.json 15def show 16end 17 18# GET /lists/new 19def new 20@list = List.new 21end 22 23# GET /lists/1/edit 24def edit 25end 26 27# POST /lists 28# POST /lists.json 29def create 30@list = List.new(list_params) 31 32@list.user_id = current_user.id 33 34#@list.tag_list.user_id = current_user.id 35 36 37respond_to do |format| 38if @list.save 39format.html { redirect_to @list, notice: 'List was successfully created.' } 40format.json { render :show, status: :created, location: @list } 41else 42format.html { render :new } 43format.json { render json: @list.errors, status: :unprocessable_entity } 44end 45end 46end 47 48# PATCH/PUT /lists/1 49# PATCH/PUT /lists/1.json 50def update 51respond_to do |format| 52if @list.update(list_params) 53format.html { redirect_to @list, notice: 'List was successfully updated.' } 54format.json { render :show, status: :ok, location: @list } 55else 56format.html { render :edit } 57format.json { render json: @list.errors, status: :unprocessable_entity } 58end 59end 60end 61 62# DELETE /lists/1 63# DELETE /lists/1.json 64def destroy 65@list.destroy 66respond_to do |format| 67format.html { redirect_to tag_lists_url, notice: 'List was successfully destroyed.' } 68format.json { head :no_content } 69end 70end 71 72private 73# Use callbacks to share common setup or constraints between actions. 74def set_list 75@list = List.find(params[:id]) 76end 77 78# Never trust parameters from the scary internet, only allow the white list through. 79def list_params 80params.require(:list).permit(:content,:start_time, tag_ids:[]) 81end 82end
補足情報(FW/ツールのバージョンなど)
rails 5.1.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/30 03:02
2019/12/30 03:07
2020/01/02 03:11 編集
2019/12/31 01:54
2020/01/02 03:06