标签: rails-activerecord

Rails包括范围

我有一个名为Author的模型.一位作者有很多文章.文章有一个名为.published的范围,其中:where(已发布:true).

我想加载作者,发表文章.我试过了:

Author.includes(:articles.published).find(params[:author_id])
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:未定义的方法'已发布'.任何的想法?

activerecord scope ruby-on-rails rails-activerecord

28
推荐指数
4
解决办法
3万
查看次数

迭代数据库中的每条记录 - Ruby on Rails/ActiveRecord

n00b问题.我正在尝试遍历我的数据库中的每个用户记录.伪代码可能看起来像这样:

def send_notifications

        render :nothing => true

        # Randomly select Message record from DB
        @message = Message.offset(rand(Message.count)).first

        random_message = @message.content

        @user = User.all.entries.each do
            @user = User.find(:id)

            number_to_text = ""

            @user.number = number_to_text #number is a User's phone number
            puts @user.number

        end

    end
Run Code Online (Sandbox Code Playgroud)

有人可以填写我这样做的最佳方法吗?对语法的一点帮助也很棒:)

database loops ruby-on-rails rails-activerecord

27
推荐指数
1
解决办法
3万
查看次数

如何在一个表中添加对同一模型的多个引用的迁移?的Ruby/Rails

如何使用引用同一个表的两个字段创建迁移?我有表A和图像.A.image1_id将参考图像,而A.image2_id也将参考图像.只有2张图片,而不是很多.如果我使用

class AddFields < ActiveRecord::Migration
   def change
    change_table(:ticket) do |t|
        t.references :image1_id
        t.references :image2_id
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我认为这不会起作用,因为它会在最后添加另一个_id,并且可能不会知道使用'image'模型.我也想过

change_table(:ticket) do |t|
    t.references :image
Run Code Online (Sandbox Code Playgroud)

但是,我该如何添加其中两个呢?我还考虑过添加

create_table :images do |t|
  t.belongs_to :ticket
  t.string :file
Run Code Online (Sandbox Code Playgroud)

但我只想要2,而不是很多,这似乎不允许从票证中获取图像,如ticket.image1ticket.image2.

根据这个文档http://apidock.com/rails/v3.2.8/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table这是我能找到的全部内容,t.references似乎也没有任何参数.

change_table(:suppliers) do |t|
  t.references :company
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-migrations rails-activerecord

27
推荐指数
2
解决办法
1万
查看次数

清洁方式按指定的顺序按ID查找ActiveRecord对象

我想获得一个给定一组id的ActiveRecord对象数组.

我认为

Object.find([5,2,3])
Run Code Online (Sandbox Code Playgroud)

将返回一个数组,其中包含对象5,对象2,然后按顺序返回对象3,但我得到的数组按对象2,对象3和对象5排序.

ActiveRecord Base 查找方法API提到您不应该按照提供的顺序期望它(其他文档不提供此警告).

一个可能的解决方案是按相同顺序的ID数组查找的?,但订单选项似乎对SQLite无效.

我可以编写一些ruby代码来自己对对象进行排序(有点简单,缩放比例较差或缩放比较复杂),但是有更好的方法吗?

sqlite activerecord ruby-on-rails find rails-activerecord

26
推荐指数
4
解决办法
2万
查看次数

after_create有多种方法?

我试图在创建之后调用两个方法,但是将它们放入数组中是行不通的...我在rails docs或google中找不到任何东西......有经验的人?

after_create [:do_this, :do_that]
Run Code Online (Sandbox Code Playgroud)

不起作用

ruby-on-rails ruby-on-rails-3 rails-activerecord

26
推荐指数
1
解决办法
1万
查看次数

在Rails的ActiveRecord中,触摸的是什么?

我听说Rails的ActiveRecord/ActiveModel有一些叫做"触摸"的东西.但是,我没有找到任何描述此功能目的的内容.

它做了什么,有什么用?

ruby-on-rails rails-activerecord

25
推荐指数
3
解决办法
9821
查看次数

为什么alias_method在Rails模型中失败

class Country < ActiveRecord::Base

  #alias_method :name, :langEN # here fails
  #alias_method :name=, :langEN=

  #attr_accessible :name

  def name; langEN end # here works
end
Run Code Online (Sandbox Code Playgroud)

在第一次呼叫alias_method失败时:

NameError: undefined method `langEN' for class `Country'
Run Code Online (Sandbox Code Playgroud)

我的意思是,当我这样做时,它失败了Country.first.

但是在控制台中我可以Country.first.langEN成功调用,并看到第二个调用也可以.

我错过了什么?

ruby activerecord ruby-on-rails alias-method rails-activerecord

24
推荐指数
1
解决办法
8605
查看次数

ActiveRecord通过多个连接进行查询

我有这样的架构.

数据库架构

managers  
    has_many :emails  
    has_many :stores

emails  
    belongs_to :manager

stores  
    belongs_to :manager  
    belongs_to :region

regions  
    has_many :stores  
    has_many :readings

readings  
    belongs_to :regions
Run Code Online (Sandbox Code Playgroud)

我想获得一位经理的阅读材料.在SQL中我会做这样的事情.

SELECT * FROM managers  
    JOIN stores ON stores.manager_id = managers.id  
    JOIN regions ON stores.region_id = regions.id  
    JOIN readings ON readings.region_number = regions.number  
WHERE  
    manager.name = 'John Smith'  
AND  
    regions.number = '1234567'
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何在activerecord中执行此操作.我一直试图理解http://guides.rubyonrails.org/active_record_querying.htmlhttp://guides.rubyonrails.org/association_basics.html但它并没有陷入其中.我想我只需要从一个不同的观点.

我以为我会访问这样的数据,但我想我只是不明白它是如何工作的.

managers.name  
managers.stores.name  
managers.stores.regions.readings.limit(10)
Run Code Online (Sandbox Code Playgroud)

我一直不得不这样这样的东西更加丑陋.

managers.first.stores.first.regions.first.readings.limit(10)
Run Code Online (Sandbox Code Playgroud)

active-record-query ruby-on-rails-4 rails-activerecord

24
推荐指数
4
解决办法
3万
查看次数

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

我需要在Rails中保存模型时计算值.所以我称之为calculate_averages一个Survey类的回调:

before_save :calculate_averages
Run Code Online (Sandbox Code Playgroud)

但是,偶尔(最初我有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
Run Code Online (Sandbox Code Playgroud)

在运行这段代码之前,我担心calculate_averages它会被调用并复制它,甚至可能会导致我正在做的事情出现问题.好吧,那么我想,好吧,我只是什么也不做,让我们calculate_averages打电话来做它的事.问题是,首先,即使您没有对记录进行任何更改,有没有办法强制回调被调用?

其次,平均的方式计算这是远远更有效率根本就没有让回调被调用的一切,做的一切平均值的一次.这可能不会让回调被调用吗?

activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rails-activerecord

24
推荐指数
6
解决办法
4万
查看次数

Rails first_or_create ActiveRecord方法

什么是first_or_create/ first_or_create!法Rails的呢?

根据文档,方法" 没有描述 "......

ruby activerecord ruby-on-rails rails-activerecord

24
推荐指数
1
解决办法
2万
查看次数