我最近将一个旧的Rails2.3应用程序(Ruby1.8.7)升级到了Rails3.2/Ruby1.9.3。使用ActiveRecord序列化并尝试访问序列化属性时,我得到:ActiveRecord::AttributeMethods::Serialization::Attributereturned..unserializethenreturnstheactualvalue.真正奇怪的是,有一些模型具有正常行为。有人可以帮助我吗? 最佳答案 我现在知道这个问题是什么时候发生的,但我仍然不知道为什么:这个有效:User选项返回{}如
我在此处代码的第2行出错,我在Estate表中有一列user_id。我在这里做错了什么?myestate=Estate.where(:Mgmt=>current_user.Company)@managements=User.where(:id=>myestate.user_id) 最佳答案 where返回ActiveRecord::Relation目的。因为where(:mgmt=>current_user.company)可能返回0、1或许多记录,所以您必须告诉查询您想要从中得到什么。尝试:myestate=Estate.wher
我正在尝试将记录添加到联接表user_logs,该表联接user_actions和users。但是,当我尝试使用以下代码添加项目时,我收到以下错误消息。为什么会出现此错误?我在下面包含了模型和架构以供引用。2.0.0-p353:001>user=User.first2.0.0-p353:002>action=UserAction.first2.0.0-p353:003>user.user_logsUserLogLoad(0.3ms)SELECT`user_logs`.*FROM`user_logs`WHERE`user_logs`.`user_id`=1=>#2.0.0-p353:00
我有一个票模型,用户可以从给定的序列号开始连续购买票。用户选择他们想要购买的门票数量,Controller生成该数量的门票并存储在数据库中。但是,如果一张票未能保存,事务应该回滚,但在这种情况下不会。tickets_controller.rb...defcreatenumber=params[:ticket_qty].to_i@tickets=Array.newnumber.timesdo|n|t=Ticket.new(ticket_params)t.serial_number=t.serial_number.to_i+n@tickets.push(t)endrespond_todo|
使用Rails4我想知道(并且很难找到答案)是否可以直接从View调用ActiveRecord方法,例如:或我知道通常的做法是将它们存储在Controller内的实例变量中,但由于我使用的是局部变量,所以我不能这样做。这样做可以吗?会痛吗?有没有更好的方法来解决这个问题(例如辅助方法)?谢谢! 最佳答案 Isdoingthisok?Canithurt?这绝对没问题,但问题是您将调用另一个数据库查询-这是Rails应用程序中最“昂贵”的部分。@instance_variables被设置一次,并且可以在整个View中使用:#app/vi
我的类层次结构如下所示:classPost有一个Controller可以像这样获取数据:@projects=Project.find(:all,:include=>[:project_image_photos,:user])在development中,这会直接从日志运行以下查询:SELECT*FROM`posts`WHERE((`posts`.`type`='Project'))ORDERBYoriginally_created_atDESC但是,一旦它在production模式下运行,即使使用相同的数据库和数据,它也会产生以下查询:SELECT*FROM`posts`WHERE((`
我想为ActiveRecord模型字段添加描述,作为每个字段的基本说明/示例。基本上是模型元数据。然后我可以在UI中显示这些(在表单的字段旁边等)我打算这样做的方法是在模型中简单地创建一个静态哈希表,其中字段名称作为键,描述作为值。即FIELD_DESCRIPTIONS={'category'=>'Selectthecategoryitshouldappearwithin.','title'=>'Thetitleshouldbeashortbutdescriptivesummary.','description'=>'Pleaseenterafulldescription.'}等等然后
在普通的Ruby中,这工作得很好:classTestSuperdeffooputs"InTestSuper.foo"endendclassTestClass我可以在TestClass实例上调用foo()和bar()并得到我期望的结果:InTestSuper.fooInTestClass.barInTestClass.bar,seconddefinitionCallingfoo:InTestSuper.fooInTestClass.bar但是,当我在Rails迁移中尝试非常相似的操作时,出现错误:####my_model.rb####puts"Inmy_model.rb"classMyM
我有一个ActiveRecord模型Media,它应该能够存储关于不同类型媒体的类似结构信息(Media::Book,Media::电影,媒体::音乐)。然而,这些子类中的每一个都有独特的方法。#TABLEmedias#string:title#string:description#integer:media_typeclassMedia如果我使用Media::Book.new("HarryPotter").reviews会起作用,但我希望能够使用Media.find("HarryPotter")=>Media::Book和Media.find("HarryPotter").revie
到目前为止,我已经构建了一个简单的Rails应用程序,其中包含三个继承自ActiveRecord的类。我在测试驱动开发方面领先了一点,因为我已经编写了需要测试的类。到目前为止,我编写的测试都进行得很顺利。对象正在创建,属性正在响应,验证都已到位。当我调用“!”时问题就开始了在我的创建方法上,因为现在对象一直被传递到数据库。而不是我的正常验证拦截无效输入,数据库似乎有机会响应刺激。到目前为止,我在运行测试时收到的错误是:ActiveRecord::记录无效:验证失败:店铺太长(最多11个字符)我很高兴收到此错误,但想知道如何在我的测试中更好地规划它。产生上述错误的代码是:it"shoul