使用save!保存模型时,我遇到验证错误的问题.ActiveRecord错误模型错误消息是空白的,所以我不知道在验证尝试中发生了什么错误.当我根据文档尝试errors.full_messages或errors.each_full时,它应该显示错误,而不是错误.
我试图保存的模型是Orders模型(使用Spree的电子商务网站).当订单中的商品被删除时,update_totals!被调用,重新计算总数,然后保存!被调用,它会触发验证错误(这个错误很少发生,但只有当我登录时,我才能找到它的原因).订单模型在其模型中有两个验证:
validates_numericality_of :item_total
validates_numericality_of :total
Run Code Online (Sandbox Code Playgroud)
我记录了order.item_total.inspect,order.total.inspect和order.errors.full_messages.inspect并得到了这个:
Wed Jan 25 08:53:08 -0800 2012order item total: #<BigDecimal:15780c60,'0.279E2',8(16)>
Wed Jan 25 08:53:08 -0800 2012order total: #<BigDecimal:152bf410,'0.2448225E2',12(20)>
Wed Jan 25 08:53:08 -0800 2012: ERRORS SAVING ORDER:
Wed Jan 25 08:53:08 -0800 2012[]
Run Code Online (Sandbox Code Playgroud)
item_total和total以十进制(8,2)存储在mySQL数据库中.最后一行是order.errors.full_messages.inspect,这是一个空数组.验证错误如下所示:
ActiveRecord::RecordInvalid (Validation failed: {{errors}}):
vendor/extensions/mgx_core/app/models/order.rb:382:in `update_totals!'
vendor/extensions/mgx_core/app/controllers/line_items_controller.rb:7:in `destroy'
app/middleware/flash_session_cookie_middleware.rb:19:in `call'
C:\Users\mgx\My Documents\Aptana Studio 3 Workspace\catalogue-spree\script\server:3
c:/Ruby187/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_load'
c:/Ruby187/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_program'
c:/Ruby187/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.16/bin/rdebug-ide:87
c:/Ruby187/bin/rdebug-ide:19:in `load'
c:/Ruby187/bin/rdebug-ide:19
Run Code Online (Sandbox Code Playgroud)
我想我的问题是双重的:
1.为什么我的activerecord错误模型没有说出验证错误是什么?
2.我该如何解决这个问题?我的item_total和total是否有效保存为十进制(8,2)?
我使用的是rails 2.3.5和spree 0.10.2
好的,快速总结一下我的设置和我想要完成的事情:
我有一个运行我的网站的rails 2.3.5服务器.我的网站上有一个flash应用程序,用户可以将图像直接上传到s3.
上传完成后,会通知rails.
在图像完成上传到s3并通知rails时,我希望rails将一些帖子发送到位于ec2上的某些内容以创建两个缩略图(110x110和600x600).
当创建缩略图并将其传送到s3时,我希望ec2上的任何进程都将帖子发送回rails以通知缩略图创建已完成并且在s3上.
完成此任务的最佳方法是什么?我非常简短地看过刀等工具,但我对使用ec2或类似服务并不熟悉.
谢谢
我有一堆rspec测试,其中大约30个是通过水豚/恶作剧的无头测试.每次我在本地运行测试时,所有100%的测试都通过了.
我最近建立了一个teamcity持续集成服务器,测试结果非常不一致.
我运行了10次测试,没有在测试之间做任何更改.只有1轮通过了100%.其他人有1-2次失败(大多数都不一样),都与无头浏览器测试有关.以下是其中一个失败的示例:
ActionView::Template::Error: Couldn't find Spree::Address with id=1072978592
Stack trace:
./app/models/spree/order_decorator.rb:50:in `initialize_default_address'
./app/models/spree/order_decorator.rb:42:in `initialize_shipment'
./app/views/layouts/core.html.erb:23:in `_8cb98e121af585621c1d08e3ec1f6022'
./app/views/layouts/default.html.erb:14:in `_588b3208edc213a939dffd2ad73f4f26'
Run Code Online (Sandbox Code Playgroud)
这个失败很奇怪,因为我查找了一个查找带ID的地址并返回一个工厂女模特的函数.我在本地没有这个问题.
以下是其中一个测试运行的另一个错误:
Capybara::ExpectationNotMet: expected to find link "10" but there were no matches
Stack trace:
./spec/features/simply_ship_spec.rb:102:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
同样,当我在本地运行时,这个错误不会发生,当我切换到selenium并观察测试时,链接显然就在那里.
这两个错误(不是全部,而是几个例子)在不同的运行中单独发生,而不对项目进行任何更新.有没有人知道为什么会这样?
rspec-rails 2.14.0 capybara 2.1 poltergeist 1.3.0 rails 3.2.14 ruby 1.9.3 p448
假设我有以下代码:
let addressSchema = yup.object().shape({
firstname: yup.string().required().max(35),
lastname: yup.string().required().max(35),
company: yup.string().max(35),
address1: yup.string().required().max(35),
address2: yup.string().max(35),
city: yup.string().required(),
stateId: yup.string().required(),
zipcode: yup.string().required().length(5),
phone: yup.string().required().matches(phoneRegex, 'Phone number is not valid')
});
let checkoutFormSchema = yup.object().shape({
email: yup.string().email().required(),
billAddressAttributes: addressSchema,
shipAddressAttributes: addressSchema,
});
<Formik
initialValues={this.buildInitialValues()}
onSubmit={(values, actions) => {
}}
validationSchema={checkoutFormSchema}
>
{formikProps => (
<FieldWrapper
Label={<Label placement="left">Email address</Label>}
Input={<Field type="email" name="email" component={Input} />}
/>
<AddressFormFields prefix="billAddressAttributes" />
<AddressFormFields prefix="shipAddressAttributes" />
)}
</Formik>
Run Code Online (Sandbox Code Playgroud)
where<AddressForm/>有一堆<Field/>用于地址的 formik组件,例如电子邮件字段的制作方式。
电子邮件字段工作正常,触发所有事件和妥善显示验证错误,但我不能得到任何的formik的<Field/>中<AddressForm/> …
好的,所以我已经安装了xampp 1.7.7并设置了我的mysql数据库和一切.我在phpmyadmin中的数据库名为"spree-default-1.1_development",我的database.yml文件如下所示:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: spree-default-1.1_development
pool: 5
username: root
password:
socket: /opt/lampp/var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)
当我输入"rails console development"时,似乎可以加载控制台:
adnan@ubuntu:~/Documents/Aptana Studio 3 Workspace/spree-default-1.1$ rails console development
Loading development environment (Rails 3.2.3)
1.9.3-p194 :001 >
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试访问我的mysql数据库中的任何内容时,我收到一个错误:
1.9.3-p194 :001 > Order
NameError: uninitialized constant Order
from (irb):1
from /home/adnan/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
from /home/adnan/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
from /home/adnan/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我无法访问mysql数据库中的模型.我的设置在ubuntu 11.04中,使用rails 3.2.3和ruby 1.9.3p194.当我在aptana中加载rails服务器时,我可以使用localhost:3000运行服务器,并且它似乎连接到数据库没问题.
当我使用带有rails 2.3的Windows 7安装程序时,我可以毫无问题地访问模型.输入"Order"会给我这个结果,我期望:
>> Order
=> Order(id: integer, user_id: integer, number: string, item_total: …Run Code Online (Sandbox Code Playgroud) 我有一个名为S3Uploader的类,它扩展了Sprite,它有一个私有函数init,看起来像这样:
private function init(signatureUrl:String,
prefixPath:String,
fileSizeLimit:Number,
queueSizeLimit:Number,
fileTypes:String,
fileTypeDescs:String,
selectMultipleFiles:Boolean,
buttonWidth:Number,
buttonHeight:Number,
buttonUpUrl:String,
buttonDownUrl:String,
buttonOverUrl:String
):void {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
在我的flex应用程序中,我正在尝试显示sprite并在加载应用程序时调用init函数.到目前为止我的代码是这样的:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
initialize="init();">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import S3Uploader;
function init() {
var s3upload:S3Uploader = new S3Uploader();
s3upload.init('/s3_uploads2.xml', '', 524288000, 100, '*.*', 'All Files', true, 100, 30, '/images/upload-button.png', '/images/upload-button.png', '/images/upload-button.png');
uploader.addChild(s3upload);
}
]]>
</fx:Script>
<s:SpriteVisualElement id="uploader" />
</s:Application>
Run Code Online (Sandbox Code Playgroud)
但是,在我调用s3upload.init的行上,我得到一个1195错误,说"1195:尝试通过静态类型S3Uploader的引用访问不可访问的方法init".
当我查找这个错误时,似乎几乎所有人都试图用set或get来调用函数.但是,我没有这样做,我不知道为什么我得到这个错误.有谁知道我做错了什么?
activerecord ×1
amazon-ec2 ×1
amazon-s3 ×1
apache-flex ×1
aws-lambda ×1
capybara ×1
flex4 ×1
formik ×1
node.js ×1
python ×1
reactjs ×1
rspec ×1
rspec-rails ×1
teamcity ×1
validation ×1
yup ×1