【Ruby × MySQL 】 投稿したユーザー名を表示したい(中間テーブル絡み)
解決したいこと
【Ruby × MySQL】
投稿する際にタグ付け出来る機能を実装しています。
投稿一覧を表示する際に投稿ユーザー名を表示したいです。
Ruby:2.6.5
Rails:6.0.3.6
発生している問題・エラー
エラーが出る前までに基本的な機能、投稿完了したら一覧で表示するまでは完了していたが、投稿者を表示したいと思いデータベースをロールバック、中間テーブルにuser_id、アソシエーショを記述してローカルで再度実行したらエラーが表示されました。
NameError in MemosController#create
undefined local variable or method `user' for #<MemoTag:0x00007fe1007ca8b0> Did you mean? user_id
該当するソースコード
memos_controller.rb (投稿コントローラー)
class MemosController < ApplicationController
def index
@memos = Memo.all.order(created_at: :desc)
end
def new
@memo = MemoTag.new
end
def create
@memo = MemoTag.new(memo_params)
if @memo.valid?
@memo.save
binding.pry
return redirect_to root_path
else
render "new"
end
end
private
def memo_params
params.require(:memo_tag).permit(:tag_name, :memo_content)
end
end
memo_tag.rb (中間テーブルレコード)
class MemoTag
include ActiveModel::Model
attr_accessor :tag_name, :memo_content
with_options presence: true do
validates :tag_name
validates :memo_content
end
def save
memo = Memo.create(memo_content: memo_content, user_id: user.id)
tag = Tag.create(tag_name: tag_name)
MemoTagRelation.create(tag_id: tag.id, memo_id: memo.id, user_id: user.id)
end
end
index.html.erb (投稿一覧表示ページ)
<div class="header">
<div class="inner-header">
<h1 class="title">
Like Share Tag
</h1>
<li class="new-post">
<%= link_to "NEW post", new_memo_path %>
</li>
</div>
</div>
<!-- 投稿タグ表示 -->
<div class="main">
<div class="message-wrap">
<%= current_user.nickname %>
<% @memos.each do |memo| %>
<div class="tag">
<p class="tag-list">
<% memo.memo_content %>
</p>
<ul class="message">
<li class="text">
<% memo.tags.each do |tag| %>
#<%= tag.tag_name %>
by<%= tag.user.nickname %>
<% end%>
</li>
<ul>
</div>
<% end %>
<%= link_to "Back", :back %>
</div>
</div>
README.md
## テーブル設計
## usersテーブル
| Column | Type | Options |
| ------------------ | ------ | ------------------------|
| name | string | null:false |
| name_kana | string | null:false |
| nickname | string | null:false |
| email | string | null:false, unique:true |
| encrypted_password | string | null:false |
### Association
- has_many :room_users
- has_many :rooms, through: :room_users
<!--- has_many :messages -->
- has_many :memos
## tagsテーブル
| Column | Type | Options |
| -------- | ---------- | ---------------------------- |
| tag_name | string | null:false |
### Association
- has_many :memo_tag_relations
- has_many :memos, through: :memo_tag_relations
## memosテーブル
| Column | Type | Options |
| ------------ | -----------| ------------------------------|
| memo_content | string | null:false |
| user | references | null:false, foreign_key: true |
### Association
- has_many :memo_tag_relations
- has_many :tags, through: :memo_tag_relations
- belongs_to :user
## memo_tag_relations テーブル
| Column | Type | Options |
| -------| ---------- | ----------------------------- |
| memo | references | null:false, foreign_key: true |
| tag | references | null:false, foreign_key: true |
### Association
- belongs_to :memo
- belongs_to :tag
自分で試したこと
paramsへuser_idをマージしても変わらず、binding.pryでデバックを行い止まっている箇所はわかった。パラメーターには過不足は無さそうだがfalseになっている。
memosとtagsテーブルにもアソシエーションが必要なのだろうか。
0