Tag: activerecord

从has_many中删除对象但不删除Rails中的原始记录?

我有这个: Post.paragraphs << new_paragraph 我需要删除id = 3的段落,因此以下内容将完全删除记录: Post.paragraphs.find(paragraph_id).destroy # or Post.paragraphs.find(paragraph_id).delete 我只需要从has_many关联中删除一个段落。 我试图使用delete和destroy 。 两种方法都完全删除关联表中的记录。 我怎样才能将它们从“容器”中删除?

如何在不运行Rails中的回调的情况下保存模型

我需要在Rails中保存模型时计算值。 所以我将calculate_averages称为Survey类的回调: before_save :calculate_averages 但是,偶尔(最初我有10k记录需要此操作)我需要手动更新每条记录的所有平均值。 没问题,我有以下代码: Survey.all.each do |survey| survey.some_average = (survey.some_value + survey.some_other_value) / 2.to_f #and some more averages… survey.save! end 在运行此代码之前,我担心calculate_averages会被调用并复制它,甚至可能会导致我正在做事的方式出现问题。 好吧,那么我想,好吧,我什么都不做,让calculate_averages被调用并做其事。 问题是,首先,即使您没有对记录进行任何更改,是否有办法强制回调被调用? 其次,计算平均值的方式更有效率,根本不让回调被调用,并一次性完成所有事件的平均值。 这可能不会让回调被调用吗?

如何在不实际执行的情况下获取ActiveRecord #ref创建的SQL语句?

我使用will_paginate与一些复杂的查询,它无法正确计算总记录数(为了显示正确数量的页面链接) – 即因为多列分组。 因此,我打算获取SELECT查询,该查询将用于检索所有记录,而不实际执行它,并使用SELECT COUNT(*) FROM …手动包装它,以获取记录数。 有什么想法怎么做? 编辑:我正在使用Rails 2.3.x.

如何在Rails中构建由多个模型组成的JSON响应

首先,期望的结果 我有User和Item模型。 我想构建一个如下所示的JSON响应: { “user”: {“username”:”Bob!”,”foo”:”whatever”,”bar”:”hello!”}, “items”: [ {“id”:1, “name”:”one”, “zim”:”planet”, “gir”:”earth”}, {“id”:2, “name”:”two”, “zim”:”planet”, “gir”:”mars”} ] } 但是,我的User和Item模型具有的属性不仅仅是那些。 我找到了一种方法让它起作用,但要注意 ,它不漂亮……请帮助…… 更新 下一节包含原始问题。 最后一节显示了新的解决方案。 我的黑客 home_controller.rb class HomeController Observation.new(current_user, @items).to_json } end end end observation.rb # NOTE: this is not a subclass of ActiveRecord::Base # this class just serves as a container to aggregate all […]

高效批量更新rails数据库

我正在尝试构建一个rake实用程序,它会经常更新我的数据库。 这是我到目前为止的代码: namespace :utils do # utils:update_ip # Downloads the file frim to the temp folder then unzips it in # Then updates the database. desc “Update ip-to-country database” task :update_ip => :environment do require ‘open-uri’ require ‘zip/zipfilesystem’ require ‘csv’ file_name = “ip-to-country.csv” file_path = “#{RAILS_ROOT}/db/” + file_name url = ‘http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip’ #check last time we […]

如何使用has_many:through和honor:conditions创建新记录?

假设我有一个课程,学生可以通过会员注册(例如课程和学生的has_and_belongs_to_many关系)。 有些会员资格是针对刚刚观看课程的学生(不是为了学分等),所以: class Course :memberships has_many :observers, :through => :memberships, :source => :student, :conditions => { :memberships => { :observer => true }} end 这是有用的: observers = Course.find(37).observers 这是不起作用的: new_observer = Course.find(37).observers.build(:name => ‘Joe Student’) 我原本以为可以使用该关联构建新记录,这会产生: 新学生记录(’Joe Student’) 新的会员记录(course_id = 37,student_id =(joe),observer = true) 但相反,我得到: ActiveRecord::AssociationTypeMismatch: Membership expected, got Array 我敢肯定,我对这是多么的困惑,并会欣赏任何见解! 我也尝试在Membership模型上使用命名作用域执行此操作,但我似乎无法使用has_many在关联中使用作用域。 非常感谢您提供任何帮助!

如何在Rails中更改记录的主ID?

rails console u = User.find(9) u.id = 7#没有其他id为7的记录 u.save =>是的 User.all id没有改变。 如何更改主ID? 为什么会阻止此操作? 在Rails 3.0.7和PostgreSQL中工作。 编辑:由于有充分的理由不这样做,我会解释原因,希望这是一个很好的理由。 我们正在对暂存进行可用性测试,因此我希望它看起来像生产,以便让每个人都轻松。 我不希望在可用性测试过程中产生混淆或错误,方法是在Staging上按一个顺序排序,在Production上按不同的顺序排列。 我只在Staging DB上更改了一个PK id。 不要在生产数据库上执行此操作!

counter_cache has_many_through sql optimization,减少sql查询次数

我如何优化我的SQL查询,忽略这样的情况: Meeting.find(5).users.size => SELECT COUNT(*)FROM … WHERE … User.find(123).meetings.size => SELECT COUNT(*)FROm … WHERE … 我不知道如何在这里使用counter_cache。 这是我的模型关系: class Meeting meeting_users end class User meeting_users end class Meeting_user < ActiveRecord::Base belongs_to :meeting belongs_to :user end 什么是最优解决方案? 如何在这里实现counter_cache?

如何获取ActiveRecordvalidation中配置的最大长度?

鉴于一个模型: class Person validates_lenght_of :name, :maximum => 50 end 我有一些显示倒计时的视图代码并强制执行此最大值。 但是我将数字50硬编码到该视图代码中。 有没有办法从模型中提取这个数字? 就像是: Person.maximum_length_of_name 我试过这个: Person.validators_on(:name) => [#true}, @klass=Trigger(id: integer, name: string, created_at: datetime, updated_at: datetime, user_id: integer, slug: string, last_update_by: integer)>, #, ##, :maximum=>50}>] 信息在那里,但我不知道如何提取它:

Rails:包含多态关联

我读了这篇有趣的文章,关于使用多态来在Rails中创建更好的活动源 。 我们最终得到了类似的东西 class Activity < ActiveRecord::Base belongs_to :subject, polymorphic: true end 现在,如果其中两个主题是例如: class Event < ActiveRecord::Base has_many :guests after_create :create_activities has_one :activity, as: :subject, dependent: :destroy end class Image < ActiveRecord::Base has_many :tags after_create :create_activities has_one :activity, as: :subject, dependent: :destroy end 将create_activities定义为 def create_activities Activity.create(subject: self) end 客人和标签定义为: class Guest < ActiveRecord::Base belongs_to […]