【RoR】モデルの属性を更新するフォームをつくりたい
状況
ユーザーのフォーム入力に従ってモデルの値を更新したい。
やり方
ビューで
form_for
を使う。コントローラーでstrong parameterを使ってパラメーターをフィルターする。
モデルの更新
前提
更新対象のモデル:article
title
属性をもつ。これを更新したい。
コード
ビュー
= form_for @article, url: "/article/update_article_title" do |f| =f.text_field :title, value: @article.title p
コントローラー
def update_arcicle_title return 404 is !update_params[:title] article = Article.find(update_params[:id]) if article.present? article.update_attributes(title: update_params[:title]) end redirect_to index_path end private def update_params params.require(:article).permit(:title) end
ビューから渡ってくるパラメーターについて
ビューの
= form_for @article, url: ...
に入力&送信されたパラメーターは次のようなハッシュとなる。
article { :title => "great article" }
これをストロングパラメーターでフィルターしたい。
require
とpermit
で二段階にフィルターする。はじめはモデル名、次に属性名で絞り込む。
params.require(:article).permit(:title) # => "great article"