我是否应该将参数检查从控制器移动到模型



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

NoMethodError: undefined 方法 'id' for ":String

除非我对我的参数进行检查。

以下有效,但闻起来很臭。是否可以将我的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

你总是可以做的

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

相关内容

  • 没有找到相关文章

最新更新