前提・実現したいこと
モデルのカラムにないパラメタがサーバに渡されたのち、Strong Parmetersを通過させて、コントローラーで値を扱いたい。
後述のサンプルモデルArticleで、headlineとcontentのカラムがあったとします。
new.html.erb
で<input name="level">
のタグを作り、level
パラメータを渡せるのですが、コントローラーではStrong Parametersで弾かれてしまいます。
<%= number_field_tag "article[level]" %>
としてarticle
に含ませればよいのか、
<%= number_field_tag "level" %>
として独立したパラメタにすればよいのか、いくつか試したのですが、いずれもうまくいきませんでした(後述エラーのとおり)
モデルとは関係ないパラメタ(保存する必要がない)をコントローラーで扱うにはどのようにすればよいでしょうか?
発生している問題・エラーメッセージ
ActiveModel::UnknownAttributeError (unknown attribute 'level' for Article.):
とか
Unpermitted parameters: :authenticity_token, :article, :level
とか
該当のソースコード
サンプルモデル
ruby
1ActiveRecord::Schema.define(version: 2019_12_20_041141) do 2 create_table "articles", force: :cascade do |t| 3 t.string :headline 4 t.string :content 5 end 6end
サンプルビュー
ruby
1<%= form_with(model: article, local: true) do |form| %> 2 <div class="field"> 3 <%= form.label :headline %> 4 <%= form.text_field :headline %> 5 </div> 6 7 <div class="field"> 8 <%= form.label :content %> 9 <%= form.text_area :content %> 10 </div> 11 12## ここ 13 <div class="field"> 14 <%= label_tag "レベル" %> 15 <%= number_field_tag "article[level]" %> 16 </div> 17<% end %>
試したこと
ruby
1def article_params 2 params.require(:article).permit(:headline, :content, :level) 3end
とか
ruby
1def article_params 2 params.permit(:authenticity_token, :article) 3end
とか
補足情報(FW/ツールのバージョンなど)
Rails 6
回答1件
あなたの回答
tips
プレビュー