Tag: activerecord

method_missing覆盖不起作用

我写了一个方便的ActiveRecord扩展来将方法委托给基础对象(基于多表inheritance ) class ActiveRecord :: Base def self.acts_as(base) class_eval%Q { def method_missing(method,* args,&blk) #{base} .send(method,* args,&blk) 救援NoMethodError 超 结束 } 结束 结束 我有一个州级和一个基类 #state class class MyState <ActiveRecord :: Base belongs_to:my_object acts_as:my_object 结束 #base class class MyObject ‘MyState’ has_one:tail,:class_name =>’MyState’ 结束 当我尝试这个时,我发现它在某些情况下不起作用。 进一步来说, > MyState.first.some_method_in_base 零 > MyObject.first.tail.some_method_in_base NoMethodError:未定义的方法`some_method_in_base’用于# 任何人都可以告诉我为什么一个工作而另一个不工作?

何时使用关联扩展名与命名范围?

从粗略的一瞥看,它们似乎只是针对同一组问题的两种不同方法,除了命名范围是可链接的,而关联扩展不是。 任何人都可以进一步解释,或提供一个更适合关联扩展而不是命名范围的示例吗?

update_all with a method

让我们说我有一个模型: class Result < ActiveRecord::Base attr_accessible :x, :y, :sum end 而不是做 Result.all.find_each do |s| s.sum = compute_sum(sx, sy) s.save end 假设compute_sum是一个可用的方法,并进行一些无法转换为SQL的计算。 def compute_sum(x,y) sum_table[x][y] end 有没有办法使用update_all ,可能是这样的: Result.all.update_all(sum: compute_sum(:x, :y)) 我有超过80,000条记录需要更新。 find_each每条记录find_each创建自己的BEGIN和COMMIT查询,并且每条记录都会单独更新。 或者还有其他更快的方法吗?

Ruby / Rails字符串数组到PostgreSQL插入

目前,我有一个rails项目,我试图将活动记录转到直接postgres,以便使用字符串数组进行大批量创建,其中值尚不存在(以避免重复)。 我面临的问题是试图逃避包含’或(等,在所述ruby数组中的字符串字符,以便postgres接受。)示例如下(显然它不起作用): Ruby数组: array_of_strings = [“example one’s value”, “example (2) value”] sql = “INSERT INTO TABLE (column) SELECT column FROM TABLE UNION VALUES #{array_of_strings} EXCEPT SELECT column FROM TABLE;” ActiveRecord::Base.connection.execute(ActiveRecord::Base.send(:sanitize_sql_array, sql))

Rails / ActiveRecord – AdapterNotSpecified,即使它是

我正在做Ruby on Rails教程。 对于前三章,它使用SQLite,但后来它建议在开发中使用PostgreSQL以便更容易地进行Heroku部署。 在编辑我的database.yml和Gemfile以使用pg而不是sqlite3之后,它似乎有效 – 除非使用Rake运行测试。 它会弹出AdapterNotSpecified错误。 C:/Ruby/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.0/lib/active_record/ connection_adapters/connection_specification.rb:52:in resolve_hash_connection’: database configuration does not specify adapter (ActiveRecord::AdapterNotSpecif ied) 等等 database.yml指定了一个适配器,如下所示: development: adapter: postgresql host: localhost username: nekkoru password: derpderp database: development encoding: UTF8 这是怎么回事? 我使用的是Windows 7 x64,Ruby 1.9.3,Rails 4.0.0,PostgreSQL 9.3.0.1。

通过具有范围的关联保存时丢失属性(Rails 4.0.0)

代码(Rails 4.0.0) class Track { where(:artist_tracks => { :artistic_role_id => 1 }) }, :through => :artist_tracks, :source => :artist end class ArtistTrack < ActiveRecord::Base belongs_to :artist belongs_to :track belongs_to :artistic_role end class Artist :artist_tracks end 寻找作品 # artist_tracks.artistic_role_id is properly set to “1” 2.0.0p195 :003 > Track.last.owning_artists Track Load (1.1ms) SELECT “tracks”.* FROM “tracks” ORDER […]

Rails ActiveRecord创建或查找

我正在开发一个Rails 4应用程序,并在我的post方法中为api我想根据用户尝试创建的内容找到记录,如果它不存在则创建它,如果它确实更新了它的参数具有。 我编写了一些实际执行此操作的代码,但需要执行一些操作。 有没有其他方法可以用可能更少的代码或查询做同样的事情。 @picture = current_picture.posts.where(post_id: params[:id]).first_or_initialize @picture.update_attributes(active: true, badge: parameters[:badge], identifier: parameters[:identifier]) render json: @picture

Rails 5的ActiveRecord :: Migration中的是什么意思?

我在Rails 5应用程序中创建的迁移已将5.0传递给方法: class CreateVariableKeys < ActiveRecord::Migration[5.0] … end 我想知道[5.0]含义。

Ruby on Rails – ActiveRecord ::关系计数方法错了?

我正在编写一个应用程序,允许用户发送有关“优惠”的消息。 我以为我会节省一些工作并使用Mailboxer gem。 我正在遵循RSpec的测试驱动开发方法。 我正在编写一个测试,确保每个优惠只允许一次Conversation 。 优惠belongs_to两个不同的用户(提出优惠的用户和收到优惠的用户)。 这是我的失败测试: describe “after a message is sent to the same user twice” do before do 2.times { sending_user.message_user_regarding_offer! offer, receiving_user, random_string } end specify { sending_user.mailbox.conversations.count.should == 1 } end 因此,在测试运行之前,用户sending_user向sending_user发送两次消息。 message_user_regarding_offer! 看起来像这样: def message_user_regarding_offer! offer, receiver, body conversation = offer.conversation if conversation.nil? self.send_message(receiver, body, offer.conversation_subject) else self.reply_to_conversation(conversation, […]

按年龄范围分组用户在ruby中

我正在尝试按年龄范围列出用户数量: Range : #Users 10-14 : 16 15-21 : 120 22-29 : 312 30-40 : 12131 41-70 : 612 71-120 : 20 我在考虑创建一个静态的哈希数组: AGE_RANGES = [ {label:”10 – 14″, min:10, max:14}, {label:”15 – 21″, min:15, max:21}, {label:”22 – 29″, min:22, max:29}, {label:”30 – 40″, min:30, max:40}, {label:”41 – 70″, min:41, max:70}, {label:”71 – 120″, min:71, […]