1

親または子 (transfer_form) を破棄せずに削除できるbegs_to 関係があります。ユーザーは、編集中に選択ドロップダウンで空白のオプションを選択することにより、親関係を削除できます。残念ながら、彼らがこれを行うと、私は

NoMethodError: "":String の未定義のメソッド「id」

パラメータのチェックを実行しない限り。

以下は機能しますが、臭いがします。current_school チェックをモデルに移動することはできますか? これは私がすべきことですか、それともコントローラーに残すべきですか?

def update
  @transfer_form = TransferForm.find(params[:id])

  t = params[:transfer_form]
  if t['current_school'] == ""
    t['current_school'] = nil
  end

  respond_to do |format|
    if @transfer_form.update_attributes(t)
  ...
  end
end
4

1 に答える 1

1

あなたはいつでもできる

params['current_school'] = nil if params['current_school'].blank?

ただし、実際には、モデルで検証して次のようなことを行うのがベスト プラクティスです。

validates :current_school, :allow_blank => false

次に、空の文字列で保存するとエラーになりますが、nilに設定したいだけだと思います。


更新
コントローラーで問題ないと思いますが、モデルで本当にそれが必要な場合は、コントローラーにコードがなくても before_save コールバックを使用するだけで、すべての空の文字列が自動的に nil に設定されます。

(untested)

before_save :sanitize_school

def sanitize_school
  current_school = nil if current_school.blank? 
end
于 2012-05-20T04:35:26.913 に答える