我应该将参数检查从我的控制器移动到我的模型吗?

时间:2012-05-20 03:57:47

标签: ruby-on-rails mongoid nomethoderror update-attributes

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

NoMethodError:未定义的方法`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

1 个答案:

答案 0 :(得分:1)

你总是可以做到

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

但实际上,最佳做法是在模型中验证它并执行以下操作:

validates :current_school, :allow_blank => false

然后当你用空字符串保存它时会出错,但我猜你只想将它设置为nil。


更新
我认为你的控制器很好,但是如果你真的想在模型中使用它我会使用一个before_save回调,那样你的控制器中没有任何代码,它只会自动设置每个空字符串为零:

(untested)

before_save :sanitize_school

def sanitize_school
  current_school = nil if current_school.blank? 
end