标签: activerecord

600
推荐指数
17
解决办法
35万
查看次数

如何返回一个空的ActiveRecord关系?

如果我有一个带有lambda的范围并且它接受一个参数,取决于参数的值,我可能知道不会有任何匹配,但我仍然想要返回一个关系,而不是一个空数组:

scope :for_users, lambda { |users| users.any? ? where("user_id IN (?)", users.map(&:id).join(',')) : [] }
Run Code Online (Sandbox Code Playgroud)

我真正想要的是一种"无"方法,与"所有"相反,它返回一个仍然可以链接的关系,但会导致查询被短路.

activerecord ruby-on-rails relation

236
推荐指数
6
解决办法
7万
查看次数

Rails:从列中选择唯一值

我已经有了一个可行的解决方案,但我真的想知道为什么这不起作用:

ratings = Model.select(:rating).uniq
ratings.each { |r| puts r.rating }
Run Code Online (Sandbox Code Playgroud)

它选择但不打印唯一值,它会打印所有值,包括重复值.它在文档中:http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

activerecord ruby-on-rails

225
推荐指数
9
解决办法
18万
查看次数

rails rake任务是否可以访问ActiveRecord模型?

我正在尝试创建自定义rake任务,但似乎我无法访问我的模型.我认为这是rails任务中隐含的内容.

我在lib/tasks/test.rake中有以下代码:

namespace :test do
  task :new_task do
    puts Parent.all.inspect
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的父模型的样子:

class Parent < ActiveRecord::Base
  has_many :children
end
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的例子,但我收到以下错误:

/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent

(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

rake activerecord ruby-on-rails task

224
推荐指数
5
解决办法
5万
查看次数

确定ActiveRecord对象是否为新

如何检查ActiveRecord对象是新对象还是已经存在?

activerecord ruby-on-rails

209
推荐指数
2
解决办法
8万
查看次数

Rails模型中不区分大小写的搜索

我的产品型号包含一些商品

 Product.first
 => #<Product id: 10, name: "Blue jeans" >
Run Code Online (Sandbox Code Playgroud)

我现在从另一个数据集导入一些产品参数,但名称的拼写有不一致之处.例如,在其他数据集中,Blue jeans可以拼写Blue Jeans.

我想Product.find_or_create_by_name("Blue Jeans"),但这将创造一个新产品,几乎与第一个相同.如果我想找到并比较小写的名字,我有什么选择.

性能问题在这里并不重要:只有100-200个产品,我想将其作为导入数据的迁移来运行.

有任何想法吗?

activerecord ruby-on-rails case-insensitive

206
推荐指数
12
解决办法
11万
查看次数

导致此ActiveRecord :: ReadOnlyRecord错误的原因是什么?

这是在这个先前的问题之后得到回答的.我实际上发现我可以从该查询中删除一个连接,所以现在工作查询是

start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true]  
Run Code Online (Sandbox Code Playgroud)

这似乎有效.但是,当我尝试将这些DeckCards移动到另一个关联时,我得到ActiveRecord :: ReadOnlyRecord错误.

这是代码

for player in @game.players 
  player.tableau = Tableau.new
  start_card = start_cards.pop 
  start_card.draw_pile = false
  player.tableau.deck_cards << start_card  # the error occurs on this line
end
Run Code Online (Sandbox Code Playgroud)

和相关的模特(画面是桌上的球员卡)

class Player < ActiveRecord::Base
  belongs_to :game
  belongs_to :user
  has_one :hand
  has_one :tableau
end

class Tableau < ActiveRecord::Base
  belongs_to :player
  has_many :deck_cards
end  

class DeckCard < ActiveRecord::Base
  belongs_to :card
  belongs_to :deck …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord join ruby-on-rails associations

203
推荐指数
5
解决办法
7万
查看次数

Rails find_or_create_by多个属性?

在活动记录中有一个名为find_or_create_by的方便动态属性:

Model.find_or_create_by_<attribute>(:<attribute> => "")

但是,如果我需要通过多个属性find_or_create呢?

假设我有一个模型来处理Group和Member之间的M:M关系,称为GroupMember.我可以有很多实例,其中member_id = 4,但我不想要多于一次的实例,其中member_id = 4和group_id = 7.我正在试图弄清楚是否可以这样做:

GroupMember.find_or_create(:member_id => 4, :group_id => 7)
Run Code Online (Sandbox Code Playgroud)

我意识到可能有更好的方法来处理这个问题,但我喜欢find_or_create这个想法的便利性.

activerecord many-to-many model ruby-on-rails dynamic-attributes

199
推荐指数
5
解决办法
10万
查看次数

有没有办法在Rails应用程序中获取所有模型的集合?

有没有办法可以在Rails应用程序中获得所有模型的集合?

基本上,我可以这样做: -

Models.each do |model|
  puts model.class.name
end
Run Code Online (Sandbox Code Playgroud)

collections activerecord model ruby-on-rails

194
推荐指数
15
解决办法
9万
查看次数

如何在Rails activerecord模型中为属性创建默认值?

我想通过在ActiveRecord中定义属性来为属性创建默认值.默认情况下,每次创建记录时,我都想拥有属性的默认值:status.我试着这样做:

class Task < ActiveRecord::Base
  def status=(status)
    status = 'P'
    write_attribute(:status, status)
  end
end
Run Code Online (Sandbox Code Playgroud)

但是在创建时我仍然从数据库中检索此错误:

ActiveRecord::StatementInvalid: Mysql::Error: Column 'status' cannot be null
Run Code Online (Sandbox Code Playgroud)

因此我假设该值未应用于该属性.

在Rails中这样做的优雅方法是什么?

非常感谢.

activerecord ruby-on-rails

190
推荐指数
9
解决办法
19万
查看次数