【发布时间】:2015-08-05 20:46:13
【问题描述】:
我在 Rails 应用程序中有一个文本框,我想在保存到数据库之前验证输入的伪装。所以,我尝试在正确的模型中放置一个 validates_precense_of 回调(如下所示)。
class Suggestion < ActiveRecord::Base
attr_accessible :details, :metadata, :suggestible, :user
belongs_to :suggestable, polymorphic: true
belongs_to :user
serialize :metadata, JSON
validates_presence_of :details
end
不是请求失败并闪烁错误消息,而是请求成功,建议表中不会保存任何建议记录。
我已经调试并确认(参见下面的控制器)@suggestion.details.blank? 和 .empty 返回 true 是文本框为空。
这是控制器动作:
def select_patients
@rx_search_request = RxSearchRequest.find(params[:id])
@groups = []
params['selected_patient_group'].each do |id, selected|
@groups << id if selected == "true"
end
unless @groups.blank?
@rx_search_request.select_multiple_patient_group_ids(@groups)
unless @rx_search_request.approval_status_reason_patients_and_approval? ||
@rx_search_request.approval_status_reason_requires_approval?
@rx_search_request.needs_consolidation!
# @rx_search_request.approve! approved_by: current_user
@redirect_url = rx_search_request_path(@rx_search_request)
# @message = "Request has been created."
else
@message = "Request has been forwarded to your admin for approval."
end
end
if params.keys.include? "suggestion"
#we are submitting a suggestion
group_ids = params[:selected_patient_group].collect{|k,v| k if v == 'true'}.compact
metadata = {
group_ids:group_ids,
patient_ids:ManualConsolidationPatientGroup.find(group_ids).collect{|g| g.manual_consolidation_patients}.flatten.collect{|_p| _p.id}
}
@suggestion = @rx_search_request.suggestions.new({
details:params[:suggestion_box],
metadata: metadata
})
@suggestion.user = current_user
@suggestion.save
# @message = "Your suggestion has been submitted."
# debugger
# flash[:alert] = 'Your suggestion cannot be blank' if @suggestion.details.empty?
flash[:alert] = 'Your suggestion has been submitted.'
end
respond_to do |format|
format.js
end
end
把控制器改成这个
unless @suggestion.details.blank?
flash[:alert] = 'Your suggestion has been submitted.'
else
flash[:alert] = 'Your suggestion cannot be blank'
end
#debugger
@suggestion.save!
也试过了
if @suggestion.save!
flash[:alert] = 'Your suggestion has been submitted.'
else
flash[:alert] = 'Your suggestion cannot be blank'
end
解决方案
添加 bang 运算符 ! 以进行正确保存
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 validation model null