なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2015/01/27)

2015/01/27分のコミットです。

CHANGELOGへの追加はありませんでした。


Move flattening records added to an association farther out

activerecord/lib/active_record/associations/collection_association.rbの修正です。

CollectionAssociation#concatメソッドで、最初に引数のrecordsのflattenを行うよう修正しています。

flattenされた状態でメソッドに渡されるのを期待していたようなのですが、必ずflattenした状態で渡される事が保証されてないので、 メソッドの中で行うよう対応したようです。


Test association was eager loaded, rather than reaching into internals

activerecord/test/cases/associations/belongs_to_associations_test.rbactiverecord/test/cases/inheritance_test.rbの修正です。

associationがeager loadされたかどうかのテストを修正しています。


Improve consistency of counter caches updating in memory

ActieRecordのcounter cacheの修正です。

has manyしている側でcounter cacheの更新をオンメモでした場合に、counter cacheの値がおかしくなるバグがあったのを修正しています。

issueより。

ActiveRecord::Schema.define do
  create_table :users do |t|
    t.integer :comments_count, null: false, default: 0
  end
  create_table :comments do |t|
    t.integer :user_id
  end
end

class User < ActiveRecord::Base
  has_many :comments
end
class Comment < ActiveRecord::Base
  belongs_to :user
end

user = User.create!(comments: [Comment.new])

puts "user.comments_count: #{user.comments_count}"
puts "user.reload.comments_count: #{user.reload.comments_count}"
user = User.create!(comments: [Comment.new, Comment.new])
# Rails 4.1.9
user.comments_count: 0
user.reload.comments_count: 2

# Rails 4.2.0
user.comments_count: 1
user.reload.comments_count: 2

Change having_values to use the WhereClause class

ActiveRecordの修正です。

having_valuesを使用していた箇所を、先日作成したWhereClauseクラスを使用するよう修正しています。

Relationクラスのリファクタリングの続きですかねえ。


Generate a query that makes sense when testing having clauses

activerecord/test/cases/relations_test.rbの修正です。

having clausesのテストで、groupする対象をidに修正しています。元々指定していた値がおかしかったので修正したとの事。


Ensure the type caster object given to Arel is always marshallable

activerecord/lib/active_record/type_caster/connection.rbの修正です。

Connection#initializeメソッドの引数を"connection" -> "klass"に修正しています。

コミットログ見る感じだと、marshal出来るように、コネクション情報は保持しないようにして、という感じなんですかねえ…。


Go through normal where logic in AssociationScope

activerecord/lib/active_record/associations/association_scope.rbの修正です。

WhereClausePredicateBuilderクラスと重複している処理、不要な処理等の削除を行っています。


Remove Relation#build_where

activerecord/lib/active_record/relation/query_methods.rbの修正です。

Relation#build_whereメソッドを削除しています。


Remove unused bind and bind! methods from Relation

activerecord/lib/active_record/relation/query_methods.rbの修正です。

使用していないRelation#bindRelation#bind!メソッドを削除しています。


Remove Relation#bind_values=

ActieRecordのRelation関係のクラスの修正です。

Relation#bind_values=メソッドを削除しています。


Move the from bind logic to a FromClause class

ActieRecordのRelation関係のクラスの修正です。

FromClauseクラスを新規に作成し、fromのバインドに関する処理をそちらのクラスにまとめています。


Update model_schema.rb [ci skip]

activerecord/lib/active_record/model_schema.rbのdocの修正です。

table_nametable_name=メソッドのdocに現状の動作と異なる内容が説明されていた為、一通りばっさり削除しています。

ただ、消しすぎたようで、次のコミットで少し戻しています。


Restore useful documentation removed at

`activerecord/lib/active_record/model_schema.rbのdocの修正です。

table_nameメソッドのdocを一部戻しています。