技術メモ

書いておぼえるブログ

【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" }

これをストロングパラメーターでフィルターしたい。 requirepermitで二段階にフィルターする。はじめはモデル名、次に属性名で絞り込む。

params.require(:article).permit(:title)
# => "great article"