Tag: activerecord

Rails has_one与类名和外键

我有一个Rails模型,我使用两个has_one关系: requester和friend 。 在控制台中我使用: f = FriendRequest.all f[0].requester 我得到ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.requester_id: SELECT “users”.* FROM “users” WHERE “users”.”requester_id” = 4 LIMIT 1 。 我真的不知道如何用类名和指定记录的键指定`has_one’关系。 这是我的模特: class FriendRequest “User”, :foreign_key => “requester_id” has_one :friend, :class_name => “User”, :foreign_key => “friend_id” end 我怎么能这样做? 在belongs_to关系中,我使用相同的,显然用belongs_to替换has_one 。 谢谢!

Rails 3.2.6中的延迟加载

我在网上找到了几个资源,而不是做以下事情: cars = Car.where(:colour => ‘black’) 在您执行以下操作之前,不会执行查询: cars.each {|c| puts c.name } 但是,在我的Rails 3.2.6项目中,当我在控制台中执行以下操作时: User.where(:first_name => “John”) 我得到以下内容: User Load (1.2ms) SELECT `users`.* FROM `users` WHERE `users`.`first_name` = ‘John’ 那么,查询正在执行吗? 懒惰装载在哪里? 或者我在这里遗漏了什么?

如何触摸HABTM关系

如果您有两个模型,video和类别,并且它们之间具有“has_and_belongs_to_many”关系,那么当其中一个模型发生更改时,如何执行触摸以使缓存无效? 你不能像对待一对多关系那样“触摸”它们。 现在,当我更改类别名称时,属于该类别的video在我使缓存无效之前不知道更改。 我的视图模板显示每个video的类别名称。

Rails:Active Record销毁时未初始化的常量错误

我在尝试销毁活动记录实例时遇到问题。 它涉及以下AR class Client :destroy has_many :email_addresses, :dependent => :destroy has_many :user_clients , :dependent => :destroy has_many :users, :through => :user_clients end class UserClient :destroy has_many :instructions, :dependent => :destroy end 在客户端实例上执行销毁时,我收到以下错误 @dead_man = Client.find(params[:id]) @dead_man.destroy => uninitialized constant UserClient::Instruction 我真的不确定这个错误来自哪里。 任何帮助是极大的赞赏!

可以在Rails / ActiveRecord中指定允许带NULL的唯一索引吗?

我想在列上指定唯一索引,但我还需要允许NULL值(多个记录可以具有NULL值)。 在使用PostgreSQL进行测试时,我发现我可以拥有一个带有NULL值的记录,但下一个会导致一个问题: irb(main):001:0> u=User.find(5) User Load (111.1ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = $1 LIMIT 1 [[“id”, 5]] => # irb(main):002:0> u.email=nil => nil irb(main):003:0> u.save (1.1ms) BEGIN User Exists (4.8ms) SELECT 1 AS one FROM “users” WHERE (“users”.”email” IS NULL AND “users”.”id” != 5) LIMIT 1 (1.5ms) ROLLBACK => false 因此,即使数据库允许,Rails也会首先检查User存在不同的ID,并将email列设置为NULL 。 有没有一种方法,不仅数据库可以允许它,但Rails也不会像上面那样先检查? […]

在Rails中创建大规模HABTM关联的最快方法是什么?

我有两个表,在Rails中有HABTM关系。 类似于以下内容: class Foo < ActiveRecord::Base has_and_belongs_to_many :bars end class Bar < ActiveRecord::Base has_and_belongs_to_many :foos end 现在我有了一个新的Foo对象,并希望为它预先加载数千个条形码,我已预先加载: @foo = Foo.create @bars = Bar.find_all_by_some_attribute(:a) @foo = Foo.create @bars = Bar.find_all_by_some_attribute(:a) 最快的方法是什么? 我试过了: @foo.bars = @bars @foo.bars << @bars 两者都运行得很慢,每个bar都有如下条目: bars_foos列(1.1ms)显示来自bars_foos SQL(0.6ms)INSERT INTO bars_foos ( bar_id , foo_id )VALUES( foo_id ) 我查看了ar-extensions,但是如果没有一个模型(Model.import)排除了它用于连接表, import函数似乎不起作用。 我需要编写SQL,还是Rails有更漂亮的方式?

Rails 4:ActiveRecord不保存任何属性,保存默认值

我有一个带有一些属性的User模型,称它们为foo和bar 。 所以我的模型看起来像这样: class User < ActiveRecord::Base attr_accessor :foo, :bar end 然后我做以下事情: user = User.new user.foo = “123” user.save! 我的开发日志显示: INSERT INTO “users” DEFAULT VALUES RETURNING “id” 然后,如果我进入Rails控制台并执行User.first我得到类似的东西: # 我正在使用Postgres,我没有将其他模型保存到数据库,为什么我的User模型保存默认值?

渴望在ActiveRecord中加载多态关联

这是我第一次使用Rails,我想知道是否可以在一个SQL查询中加载一个多态关联? 它们之间的模型和关联足够基本:资产模型/表可以通过多态关联引用内容(图像,文本或音频),即 class Asset true 结束 图像,文本,音频定义如下: class Image :content 结束 当我尝试加载图片时,请这样说: Image.first( :conditions => {:id => id}, :include =>:asset ) 它指定了两个查询,一个用于检索Image,另一个用于检索资产(FYI,如果我指定了:joins ,也会发生这种情况)。 根据我的理解,ActiveRecord这样做是因为它不知道Image和Asset之间存在一对一的关联。 有没有办法强制连接并一次检索2个对象? 我也尝试使用自定义选择连接,但我最终必须手动创建ActiveRecord模型及其关联。 ActiveRecord是否提供了这样做的方法?

ActiveRecord将字符串解析为datetime?

如果我在创建新的AR对象时将String传递给Datetime列,它将自动解析: 1.9.2p290 :011 > Movie.new(:release_date=>”21-Nov-1990″) => # Rails或ActiveRecord如何做到这一点? 它使用哪种方法?

手动更新模型后更新db / migrate?

例如,我有这个模型: class Product < ActiveRecord::Base attr_accessible :name, :order end 然后,当我做rake db:migrate它创建了这个db / migrate / 20120825132038_create_products.rb : class CreateProducts < ActiveRecord::Migration def change create_table :products do |t| t.integer :order t.string :name t.timestamps end end end 但这一切都发生了因为我使用了rails generate Product order:integer name:string 现在我转到产品型号并手动更改为: class Product < ActiveRecord::Base attr_accessible :name, :order, :category_id validates :name, uniqueness: true belongs_to :category end […]