Web サイトで 404 エラーが発生することは絶対にあってはなりません。すべてのエラーをキャッチして適切に処理するようにしてください。
エラーが発生している場所によって異なります。たとえば、編集アクションでコントローラーを使用している場合.exists?
は、実際にエラーがスローされないように、おそらく と組み合わせてレスキューを使用できます。このようなもの:
def edit
if Model.exists?(params[:id])
@model = Model.find(params[:id])
else
flash[:error] = "Unable to find model with ID #{params[:id]}!"
redirect_to models_path
end
end
これにもモデル レベルの検証を追加できます。グループに属している (つまり、group_id を持つ) ユーザーがいるとします。この検証により、group_id が設定されているだけでなく、実際のグループ レコードにマップされていることが保証されます。
# User.rb
validates_presence_of: group
.create!
そうすることで、パラメータをorメソッドに投げ込むだけ.save!
では、検証は失敗し、標準の Rails エラー メッセージが表示されます。
ただし、コントローラーは例外をスローしないバージョン (.create
および.save
) を使用する必要があり、上記のようなことを行ってオブジェクトが有効かどうかを確認し、有効でない場合はフラッシュを設定します。