Tag: activerecord

ActiveRecord在Ruby 1.9.2-rc1下以ASCII-8Bit返回数据

除了标题之外,当从ActiveRecord加载数据时,尽管我尽最大努力强制编码,但编码始终设置为ASCII-8Bit。 我已经在这里输入了尽可能详细的信息,试图建立一个可以用来帮助我的好错误报告! 该项目使用以下技术: Padrino框架 Ruby 1.9.2-rc2(同样是1.9.1和1.9.2-preview3) ActiveRecord的 MySQL的 (完整名单) $ bundle show | ack ‘(record|padrino)’ * activerecord (2.3.8) * padrino (0.9.14) * padrino-admin (0.9.14) * padrino-core (0.9.14) * padrino-gen (0.9.14) * padrino-helpers (0.9.14) * padrino-mailer (0.9.14) 剧集表: mysql> DESCRIBE `episodes`; +—————-+————–+——+—–+———+—————-+ | Field | Type | Null | Key | Default | Extra | +—————-+————–+——+—–+———+—————-+ […]

Rails模型在子文件夹和关系中

我在我自动加载的文件夹中组织了一些我的rails模型 config.autoload_paths += Dir[Rails.root.join(‘app’, ‘models’, ‘{**}’)] 我可以直接使用所有模型(例如Image.first.file_name ),但是当我尝试通过关系访问它们时,例如@housing.images.each do… with has_many: images我得到以下错误 Unable to autoload constant Housing::HousingImage, expected /path/app/models/housing/image.rb to define it 如何让rails使用我的模型进行关系方法? 我正在运行ruby 2.2和rails 4.2

Railsvalidation虚拟属性

我这个型号: class Bunny < ActiveRecord::Base attr_accessor :number validates_presence_of :number validates_numericality_of :number end 每当我提交表单来创建此模型时,我都会收到以下错误: 未定义的方法`number_before_type_cast’用于#

ActiveRecord:包括 – 如何使用已加载关联的地图?

我有一个小的rails应用程序,我正在尝试获取一些订单统计信息。 所以我有一个Admin模型和一个Order模型,具有一对多的关联。 class Admin < ActiveRecord::Base attr_accessible :name has_many :orders class Order < ActiveRecord::Base attr_accessible :operation belongs_to :admin 我正在尝试使用此查询获取特定订单: admins = Admin.where(…).includes(:orders).where(‘orders.operation = ?’, ‘new gifts!’) 这与预期一样有效。 但是当我尝试使用这样的地图制作json时 admins.map {|a| [a.name, a.orders.pluck(:operation)]} Rails使用新查询再次加载订单,忽略已加载的对象。 (5.6ms) SELECT “orders”.”operation” FROM “orders” WHERE “orders”.”admin_id” = 26 (6.8ms) SELECT “orders”.”operation” FROM “orders” WHERE “orders”.”admin_id” = 24 (2.9ms) SELECT “orders”.”operation” FROM […]

如何在更新的Rails上通过readonly替换find?

我的项目中有这个遗留代码: Model.find(id, :readonly => false) 显然,它通过id搜索,只搜索非readonly的对象。 但readonly不是Model的属性,这应该是检查实际的ActiveRecord属性,该属性定义该实例是否是只读实例。 我不知道这个代码实际上是做什么的,也许是:readonly => false在那里没用。 但是我得到了预期的警告: DEPRECATION WARNING: Passing options to #find is deprecated. Please build a scope and then call #find on it. 我无法用where替换它,因为我无法在SQL中检查readonlyness,因为它不是SQL属性。 该错误实际上明确指出,如果在范围内,我仍然可以使用find。 但我做了一个范围,如下: scope :by_id_not_readonly, ->(id) { find(id, :readonly => false) } 但抛出相同的警告,但在模型中的范围声明行而不是控制器… 我做了一些其他测试: 将其替换为where(’id =?AND readonly = false’,id)实际上会产生错误,因为例外 – readonly不适合模型。 在没有readonly位的情况下运行代码会破坏测试,因为它返回只读记录,稍后代码会尝试更新它们,从而产生错误。 向查找散列添加不正确的选项,例如find(id,:readonly => false,:ldisfs32j9fmdf90sdfds => […]

基于params的动态ActiveRecord查找器方法链接

我是rails的新手,我想基于不同的GET参数(过滤和排序)进行选择查询。 我可以在代码中添加条件吗? 例如: if params[:ratings] Movie.where(:rating => params[:ratings].keys) end 然后添加排序和其他条件。 我怎么能得到这个? 也许有一种更好的方法来动态修改选择查询(不需要创建SQL字符串)。 谢谢。

获取OCIError:ORA-00932:来自Rails 3的不一致数据类型

这是场景。 我正在为Ruby On Rails编写我的geo-ruby oracle适配器,它支持开箱即用的SDO_GEOMETRY。 一切顺利。 我编写了用于从Oracle DB中成功选择SDO_GEOMETRY对象的代码。 当我想编写插入和更新部件时,一切都毁了。 以下就是我的想法。 我希望能够做到这一点: g = GeoShape.new(name:”point1″, shape: Point.from_x_y(-34,-43,4326)) g.save 我从上面的语句中生成了以下sql查询: INSERT INTO “GEO_SHAPES” (“CREATED_AT”, “ID”, “NAME”, “SHAPE”, “UPDATED_AT”) VALUES (:a1, :a2, :a3, :a4, :a5) [[“created_at”, Tue, 03 Jul 2012 08:42:01 UTC +00:00], [“id”, 10112], [“name”, “point1”], [“shape”, “SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1,1), SDO_ORDINATE_ARRAY(-34,-43))”], [“updated_at”, Tue, 03 Jul 2012 […]

将数组#select转换为rails 4中的活动记录查询

我正在编写自定义搜索function,我必须通过关联进行过滤。 我有2个活动记录支持的模型,卡片和颜色带有has_many_and_belongs_to,颜色有属性color_name 由于我的数据库已经增长到大约10k卡,我的搜索function变得exception缓慢,因为我有一个带有查询的select语句,所以基本上我不得不进行数千次查询。 我需要将数组#select方法转换为活动记录查询,这将产生相同的结果,并且我无法提出解决方案。 当前(相关代码)如下: colors = [[‘Black’], [‘Blue’, ‘Black’]] #this is a parameter retrieved from a form submission if color cards = color.flat_map do |col| col.inject( Card.includes(:colors) ) do |memo, color| temp = cards.joins(:colors).where(colors: {color_name: color}) memo + temp.select{|card| card.colors.pluck(:color_name).sort == col.sort} end end end 我试图模仿的function是只搜索具有与传入数组完全匹配的颜色的卡(比较两个数组)。 因为卡可以是单红,红蓝或红蓝绿等,我需要能够只搜索红蓝卡或只搜索单红卡 我最初是沿着这条路线开始的,但是我在将数组与活动记录查询进行比较时遇到了麻烦 color_objects = Color.where(color_name: col) Card.includes(:colors).where(‘colors = […]

我应该使用ON DELETE CASCADE,:dependent =>:destroy,还是两者都使用?

在Rails应用程序中,我在MySQL中有外键约束,我将它们全部手动设置,与我的迁移分开。 我试图找出是否应该使用ActiveRecord :dependent => :destroy选项。 例如,在我的架构中我有表… users —– log_entries ———– user_id # Has FK constraint to users.id with ON DELETE CASCADE 在我的模型中我可以…… class User :destroy end 我应该在模型上省略依赖选项并将其留给DB吗? 或者在那里拥有它是否很好? 删除此应用程序中的内容时,我不需要运行任何回调。 在所有情况下,只需删除它们即可。 另一个要考虑的因素是我的测试环境中不会出现FK约束,可能是因为rake db:test:prepare没有设置它们。 因此,如果我完全依赖MySQL级联删除,那么很难测试会发生什么。

Mongoid和ActiveRecord关系:未定义的方法`quoted_table_name’

class Contest NoMethodError: undefined method `quoted_table_name’ for ClaimTemplate:Class 好的,我们将quoted_table_name添加到ClaimTemplate : def self.quoted_table_name “claim_templates” end # console Contest.new.claim_template #=> nil # Cool! # But: Contest.last.claim_template #=> TypeError: can’t convert Symbol into String 那么如何配置我的模型以便彼此正常工作 PS: 现在我有这种结构,工作正常,但我希望获得关系( Assosiations )的好处。 class Contest self.id).first end # Mongoid going to be crazy without this hack def self.using_object_ids? false end end