19

モデル: 投稿とユーザー

投稿の所属先 :user
ユーザー has_many :posts

単純。

少数のユーザーが存在すると仮定して、投稿の編集ページにアクセスします。

<%= form_for @post do |f| %>

...

<% User.all.each do |user| %>
  <div><%= f.radio_button "user_id", user.id %></div>
<% end %>

...

Post のコントローラーは、Rails 4 の強力なパラメーターを利用します。

params.require(:post).permit(:user_id)

編集投稿フォームには、フィールドとしてラジオ ボタンのみがあると仮定します。

問題: ActionController::ParameterMissing 例外がスローされます。パラメータが見つかりません: 投稿

Post params ハッシュが作成されないため、上記の例外がスローされます。たとえば、空のテキスト フィールドとは異なり、空のラジオ ボタンは、モデルのパラメーター ハッシュの作成をトリガーしません。

Post モデルで user_id が有効である必要がある場合はどうなりますか? 確かに、投稿を保存できない理由でビューを再度レンダリングしたいと思うでしょう。

質問: Rails の慣習に従いながら、この状況を処理するエレガントな方法は何ですか?

アップデート:

これについてさらにブレインストーミングすると、この問題を引き起こす状況は他にもたくさんあると思います。必ずしもラジオ ボタンに対応しているわけではありません。

4

2 に答える 2

4

これは私の当面の解決策でした...明らかにポストコントローラーにいて、とにかくそれらが必要な場合、なぜポストパラメーターをチェックする必要があるので、少しばかげているように思えます。非常に直感に反するようです。これは本当に最善の方法ですか?

  params.require(:post).permit(:user_id) if params[:post]
于 2013-06-27T22:09:00.643 に答える