1

我有一个 belongs_to 关系,可以在不破坏父级或子级(transfer_form)的情况下删除它。用户可以在编辑时通过选择下拉菜单中的空白选项来消除父关系。不幸的是,当他们这样做时,我最终得到

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 回答