Questions tagged «activerecord»

Active Record是一种将域逻辑与单个对象中的存储抽象相结合的模式。使用此标记可以查询有关模式的问题,可以使用[rails-activerecord]来查询有关Rails ORM框架的问题。

16
如何在Ruby中替换带重音符号的拉丁字符?
我有一个ActiveRecord模型,Foo其中有一个name字段。我希望用户能够按名称搜索,但我希望搜索忽略大小写和任何重音符号。因此,我还要存储一个canonical_name要搜索的字段: class Foo validates_presence_of :name before_validate :set_canonical_name private def set_canonical_name self.canonical_name ||= canonicalize(self.name) if self.name end def canonicalize(x) x.downcase. # something here end end 我需要填写“此处的内容”以替换带重音符号的字符。有没有比这更好的了 x.downcase.gsub(/[àáâãäå]/,'a').gsub(/æ/,'ae').gsub(/ç/, 'c').gsub(/[èéêë]/,'e').... 而且,就此而言,由于我没有使用Ruby 1.9,所以无法将这些Unicode文字放入我的代码中。实际的正则表达式看起来丑陋得多。



2
Rails:schema.rb有什么用?
我曾经以为db/schema.rb在Rails项目中存储了数据库架构,以便ActiveRecord可以知道它具有什么表/列。 但是更早之前,我惊讶地注意到,删除后我的项目可以正常运行db/schema.rb! 那么,既然Rails没有它就可以工作,那么schema.rb真正的作用是什么?

6
accepts_nested_attributes_for子关联验证失败
我在我的一个Rails模型中使用accepts_nested_attributes_for,我想在创建父代后保存子代。 该表单可以正常运行,但是验证失败。为简单起见,请想象以下内容: class Project < ActiveRecord::Base has_many :tasks accepts_nested_attributes_for :tasks end class Task < ActiveRecord::Base belongs_to :project validates_presence_of :project_id validates_associated :project end 我正在跑步: Project.create!( :name => 'Something', :task_attributes => [ { :name => '123' }, { :name => '456' } ] ) 保存项目模型后,任务验证失败,因为它们没有project_id(因为尚未保存项目)。 看起来Rails遵循以下模式: 验证项目 验证任务 保存项目 保存任务 该模式应为: 验证项目 …

4
Rails 3 /不带模型的表单:如何创建不与模型绑定的表单?
我有一个模型,并且有一个视图,该视图显示用于基于该模型创建新对象的表单。我们称该表格为Form1。 用户提交后Form1,即创建了对象。然后,我想在下一页上显示第二个表单Form2,该表单要求用户在将对象保存到数据库之前检查各种选项。 我的问题可能是非常基本的。我不知道如何创建Form2,因为它不直接与模型绑定。因为我是Rails新手,所以我只创建了以下表格: form_for(@object) { |f| ... } @object 是从模型实例化的对象 问题:我不认为这种代码可以满足我的目的。Form2考虑到它一定不能基于@object或@object模型,我该如何创建? 我的应用中的一些细节: 该站点Form1在重定向到OAuth服务器之前接受值()。 当用户在OAuth服务器上验证其凭据时,她将被重定向回我的站点。一个XML-RPC请求,然后获取关于用户的账户上的信息OAuth服务器。 该XML响应可能表明该用户在该帐户上只有一个帐户OAuth服务器。如果是这样,将从中检索一些值XML并将其添加到对象(然后(最终)保存在数据库中),然后将用户重定向到成功页面。 但是,如果XML响应指示用户在OAuth服务器上有多个帐户,则我想显示一个表格(Form2),该表格允许用户选择OAuth服务器上的哪些帐户与我的网站相关联。因此,Form2真正询问用户要创建多少个对象,而不是询问对象的特定属性。



7
在ActiveRecord对象中获取属性的类型
我想知道是否有可能以编程方式获取类型(如AR所知-例如在迁移脚本和数据库中)(我知道数据存在于某处)。 例如,我可以处理所有属性名称: ar.attribute_names.each { |name| puts name } .attributes仅返回名称到其当前值的映射(例如,如果未设置该字段,则没有类型信息)。 我在一些地方看到了类型信息: 在脚本/控制台中,输入AR实体的名称: >> Driver => Driver(id: integer, name: string, created_at: datetime, updated_at: datetime) 所以很清楚它知道类型。另外,还有.column_for_attribute,它具有一个attr名称并返回一个列对象-该类型具有埋在基础数据库列对象中的类型,但似乎并不是一种干净的方式来获取它。 我也想知道是否有一种方法可以使新的“ ActiveModel”友好(rails3)并且与数据库详细信息分离(但是类型信息可能不是它的一部分,我似乎无法找出是不是)。 谢谢。

13
ActiveRecord find_each结合限制和顺序
我正在尝试使用ActiveRecord的find_each方法运行约50,000条记录的查询,但是它似乎忽略了我的其他参数,如下所示: Thing.active.order("created_at DESC").limit(50000).find_each {|t| puts t.id } 除了要在50,000处停下来而不是按进行排序外created_at,这是在整个数据集上执行的结果查询: Thing Load (198.8ms) SELECT "things".* FROM "things" WHERE "things"."active" = 't' AND ("things"."id" > 373343) ORDER BY "things"."id" ASC LIMIT 1000 有没有办法获得类似的行为,find_each但具有最大总限制并遵守我的排序标准?

12
有没有办法避免自动更新Rails时间戳字段?
如果您有数据库列created_at,updated_at那么在创建和更新模型对象时,Rails会自动设置这些值。有没有一种方法可以保存模型而不接触那些列? 我要引入一些旧数据,我想从(不同名称)旧数据字段中的相应值中设置这些值。我发现在模型上设置它们然后保存模型时,Rails似乎会覆盖传入的值。 当然,我可以使用不同的命名方式来命名Rails模型列,以防止这种情况,但是在导入数据之后,我希望Rails执行其自动时间戳记功能。


3
什么时候使用save !,创建!和update_attributes!在Rails中?
我正在尝试找出何时使用爆炸!保存和更新记录的版本?我已经阅读并听说,如果您只是保存一个记录或更新单个属性,或者您确信没有问题的话,或者总是在控制器外部使用它们,则不需要它们。我想我对保存多件事情然后发生某些事情失败然后数据库中的数据不完整感到不安。我正在从事的当前Rails项目已完成50%以上,目前还没有任何爆炸。我在模型中调用了一些自定义方法,这些方法会更新或创建多个记录,并担心它们是否应该进行某种事务处理。 很抱歉,如果这看起来很分散,但我只是想弄清楚如何正确使用ActiveRecord中的保存功能,使我的生活更轻松,最后一点压力也减轻了。谢谢你的时间。

3
Rails中列名的别名
在我的数据库中有列名,例如“ delete”或“ listen-control”等。这些不能更改,因此我想为名称加上别名,以避免我的应用程序出现问题。 我找到了以下代码,但是它已经过时了(2005年8月5日),不适用于Rails 3: module Legacy def self.append_features(base) super base.extend(ClassMethods) end module ClassMethods def alias_column(options) options.each do |new_name, old_name| self.send(:define_method, new_name) { self.send(old_name) } self.send(:define_method, "#{new_name}=") { |value| self.send("#{old_name}=", value) } end end end end ActiveRecord::Base.class_eval do include Legacy end 如何别名列名?可能吗?

2
我怎么知道何时在Rails中“刷新”我的模型对象?
这是我正在进行的集成测试的一部分: user = User.first assert !user.is_active? get confirm_email_user_url(user),:confirmId => user.mail_confirmation_hash assert_equal response.status,200 # because confirm_email_user_url modifies the activation state of the object user = User.first assert_equal user.state,"activated" 我花了最后一个小时调试此:)。在我的初始版本中,user访问confirm_email_user_url之后,我没有重新初始化,inactive即使激活了用户,状态也始终为。 我如何知道是否应该“重新加载”(缺少更好的名称)我的模型对象?我应该怎么称呼呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.