はじめに
Railsで記事投稿アプリを作ろうと思い、手順をカットするためにScaffoldを導入したところ、投稿とユーザーを結びつけるのに躓いたので知見を共有
詳しく知りたい人はこちらのドキュメントをどうぞ
前準備
Scaffoldで投稿機能生成
まずはScaffoldで投稿機能を生成。めちゃくちゃ簡単。db:migrate忘れずに
$ rails g scaffold Post content:string
$ rails db:migrate
devise
こちらの記事を参考に。めっちゃ分かりやすい
紐づけ
belongs_toとhas_many
app/models/user.rb
class User < ApplicationRecord
# 以下を追加.複数形のsを忘れずに
has_many :posts, dependent: :destroy
end
app/models/post.rb
class Tip < ApplicationRecord
# 以下を追加.念のため、空の投稿は拒否されるようにする
belongs_to :user
validates :content, presence: true
end
user_idカラムの追加
$ rails g migration add_user_id_to_posts user_id:integer
$ rails db:migrate
これで仕組み上はUserモデルとPostモデルの紐づけが完了した
controllerに追加
app/controllers/posts_controller.rb
private
# Use callbacks to share common setup or constraints between actions.
def set_post
@post = Post.find(params[:id])
end
# Only allow a list of trusted parameters through.
def post_params
params.require(:post).permit(:content)
end
end
Scaffoldによって自動生成された上のコードを以下のように変更する。
app/controllers/posts_controller.rb
private
# Use callbacks to share common setup or constraints between actions.
def set_post
@post = Post.find(params[:id])
end
# Only allow a list of trusted parameters through.
def post_params
params.require(:post).permit(:content).merge(user_id: current_user.id)
end
end
これで完成。実行してlocalhost:3000/posts に移動し投稿してみよう‼‼