我有一个模特:
class HelloRails < ActiveRecord::Base
attr_accessible :filename, :filevalidate
include In4systemsModelCommon
validates :filename, presence: true
def update
parameters = [self.filename, @current_user]
parameters.map!{|p| ActiveRecord::Base.connection.quote p}
sql = "call stored_procedure(#{parameters.join(',')})"
ActiveRecord::Base.connection.execute(sql)
end
end
在视图中,我有一个名为text_field
的{{1}}。当我单击提交按钮时,它在模型中调用此更新方法以调用存储的proc来执行。现在验证不起作用。
我不想接受:filename
的文件名。我怎么能这样做?
答案 0 :(得分:1)
它不会验证,因为您正在直接执行sql:
ActiveRecord::Base.connection.execute(sql)
只有在使用save
和update_attributes
等“普通”ActiveRecord方法时才会运行验证。要手动运行验证,您可以在对象上调用valid?
。
型号:
def update
return false unless self.valid? # validation failed: return false
parameters = [self.filename, @current_user]
parameters.map!{|p| ActiveRecord::Base.connection.quote p}
sql = "call stored_procedure(#{parameters.join(',')})"
ActiveRecord::Base.connection.execute(sql)
true
end
然后在您的控制器中,您必须检查更好@object.update
返回true
或false
并在必要时在您的视图中显示错误。
控制器:
# This is just an example. I don't know your code.
def update
@object = HelloRails.find(params[:id])
if @object.update
redirect_to somewhere
else
render :action => 'edit'
end
end