我有一个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
答案 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