我有一个名为Author的模型.一位作者有很多文章.文章有一个名为.published的范围,其中:where(已发布:true).
我想加载作者,发表文章.我试过了:
Author.includes(:articles.published).find(params[:author_id])
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:未定义的方法'已发布'.任何的想法?
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)
有人可以填写我这样做的最佳方法吗?对语法的一点帮助也很棒:)
如何使用引用同一个表的两个字段创建迁移?我有表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.image1或ticket.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) 我想获得一个给定一组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代码来自己对对象进行排序(有点简单,缩放比例较差或缩放比较复杂),但是有更好的方法吗?
我试图在创建之后调用两个方法,但是将它们放入数组中是行不通的...我在rails docs或google中找不到任何东西......有经验的人?
after_create [:do_this, :do_that]
Run Code Online (Sandbox Code Playgroud)
不起作用
我听说Rails的ActiveRecord/ActiveModel有一些叫做"触摸"的东西.但是,我没有找到任何描述此功能目的的内容.
它做了什么,有什么用?
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
我有这样的架构.

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.html和http://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) 我需要在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
什么是first_or_create/ first_or_create!法Rails的呢?
根据文档,方法" 没有描述 "......