※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
フォームから記事をCRUDできるようにする
前回:コンソール画面から記事を作成できた
今回:実際に記事投稿フォームから、記事をCRUD(作成・編集・更新・削除)できるようにしていく
app/controllers/articles_controller.rbを開く
記事の作成(new・create)
current_user
は、「今ログインしているユーザー」を指す- 関連性があるときは
build
を使う(new
と同じような意味)
# 現在
def index
@articles = Article.all
end
# 修正後
def new
@article = current_user.articles.build
end
current_user.articles.build
で空の@articleを作る
↓ 中身がない状態(nil)が出来上がる
User.first.articles.build
<Article id: nil, title: nil, content: nil,
created_at: nil, updated_at: nil, user_id: 4>
# 現在
def create
@article = Article.new(article_params)
if @article.save
redirect_to article_path(@article),
notice: '保存できました'
else
flash.now[:error] = '保存に失敗しました'
render :new
end
end
# 修正後
def create
@article = current_user.articles.build(article_params)
if @article.save
redirect_to article_path(@article),
notice: '保存できました'
else
flash.now[:error] = '保存に失敗しました'
render :new
end
end
current_user.articles.build
で空の@articleを作る
記事の編集・更新(edit・update)
current_user.articles
により、自分の記事のみ編集対象とする
# 現在
def edit
end
# 修正後
def edit
@article = current_user.articles.find(params[:id])
end
# 現在
def update
if @article.update(article_params)
redirect_to article_path(@article),
notice: '更新できました'
else
flash.now[:error] = '更新できませんでした'
render :edit
end
end
# 修正後
def update
@article = current_user.articles.find(params[:id])
if @article.update(article_params)
redirect_to article_path(@article),
notice: '更新できました'
else
flash.now[:error] = '更新できませんでした'
render :edit
end
end
記事の削除(destroy)
current_user.articles
により、自分の記事のみ削除対象とする
# 現在
def destroy
article = Article.find(params[:id])
article.destroy!
redirect_to root_path, notice: '削除に成功しました'
end
# 修正後
def destroy
article = current_user.articles.find(params[:id])
article.destroy!
redirect_to root_path, notice: '削除に成功しました'
end
#DAY20