まず、 ActiveRecordが提供するfind_by_sqlメソッドについて説明します。このメソッドは次のように使用できるようです。
Post.find_by_sql("SELECT title FROM posts WHERE author_id = ?", [author_id])
2番目のパラメーターは「バインド」と呼ばれ、クエリの疑問符に対応する変数の配列です。バインド配列を使用してパラメーターをクエリに挿入する必要があります。これは、バインドを自分で行った場合に発生するSQLインジェクションの危険性を回避できるためです。
Post.find_by_sql("SELECT title FROM posts WHERE author_id = #{author_id}")
では、これはActiveRecord :: Relationとどのように関連していますか?ARELのポイントは、ActiveRecord :: Relationオブジェクトのメソッドを呼び出すことで、一度に少しずつクエリを作成できることです。これらのメソッドはたくさんあり、以下にそれらのリストをいくつか示します。
http://apidock.com/rails/v3.2.8/ActiveRecord/QueryMethods
したがって、このbind
メソッドは、現在のオブジェクトを複製して新しいオブジェクトを作成し、指定されたオブジェクトvalue
をのリストに追加してからbind_values
、新しいオブジェクトを返します。最終的に、リレーションを使用してクエリを生成すると、その値自体がクエリの作成に使用されていることがわかります。getが渡される1つの例は、メソッドにあります。bind_values
find_by_sql
exec_queries
@records = eager_loading? ? find_with_associations : @klass.find_by_sql(arel, bind_values)
gemで「bind_values」を検索するactiverecord
と、それが使用されている同様の場所がいくつか見つかります。
bind
メソッドはによって呼び出されると思っていたのwhere
ですが、activerecordのどこにも呼び出されていないようです。たぶんそれは古いデザインからの残り物です。bind
私はあなたがあなたのアプリで呼び出すべきではないと思います。