我已将以下内容添加到控制器的创建操作中:
def create
BatchUser.mass_insert_v2(params[:batch_user][:batch_name], params[:batch_user] [:batch_description], params[:batch_user][:quantity])
redirect_to batch_users_path
end
在我的BatchUser模型中,'mass_insert_v2'就像这样开始:
def self.mass_insert_v2(batch_name, batch_description, quantity)
@batch_create = BatchUser.create! :batch_name => batch_name, :batch_description => batch_description
...
end
然后继续使用随机用户名和密码创建X用户帐户。我选择了这条路线,因为我发现原始sql插入比单独使用activerecord更快。
我遇到的问题是我在努力渲染我的错误消息。例如,batch_name必须存在且唯一。
我收到错误信息:
ActiveRecord::RecordInvalid in BatchUsersController#create
但没有错误显示。
以前,我已经在我的控制器中进行了检查:
respond_to do |format|
if @batch_user.save
....
else
....
但这似乎不再起作用了。如何在页面上显示错误?
答案 0 :(得分:1)
创造! (使用bang创建!)如果对象验证失败,将抛出异常。除非您计划捕获此异常并处理,否则最好只使用create,然后检查对象是否已成功创建(具有id)和/或有错误。
有几种方法可以处理查找和呈现错误消息,因此您可以进行实验。但是,了解以下内容以及上面的重要说明将有助于您按计划进行,我认为:
@batch_user = BatchUser.create(attr_hash) #will give you an object to work with instead of throwing an exception.
如果您有现有对象:
@batch_user.valid? #will trigger the validations only and set the object's errors attribute with any relevant data and return a boolean value.
@batch_user.errors #gives you access to the error data (in 3.1 ActiveModel::Errors object)
就实际渲染错误而言,就像我说的那样有几种选择。我更喜欢将这些错误消息(obj.errors.full_messages)放入flash中或使用类似dynamic_form plugin的内容。