Ruby on Rails
Rails Cookbook - 高度なレールレシピ/学習とコーディングテクニック
サーチ…
レールコンソールを使用してテーブルで再生する
テーブルの表示
ActiveRecord::Base.connection.tables
任意のテーブルを削除します 。
ActiveRecord::Base.connection.drop_table("users")
------------OR----------------------
ActiveRecord::Migration.drop_table(:users)
------------OR---------------------
ActiveRecord::Base.connection.execute("drop table users")
既存の列からインデックスを削除する
ActiveRecord::Migration.remove_index(:users, :name => 'index_users_on_country')
ここで、 country
は、マイグレーションファイル内の列名で、以下に示すように、 users
テーブルにインデックスが既に追加されています。
t.string :country,add_index: true
外部キー制約を削除する
ActiveRecord::Base.connection.remove_foreign_key('food_items', 'menus')
そこでは、 menus has_many food_items
とそれぞれの移行があります。
列を追加
ActiveRecord::Migration.remove_column :table_name, :column_name
例えば:-
ActiveRecord::Migration.add_column :profiles, :profile_likes, :integer, :default => 0
Railsメソッド - ブール値を返す
Railsモデルのどのメソッドもブール値を返すことができます。
簡単な方法 -
##this method return ActiveRecord::Relation
def check_if_user_profile_is_complete
User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
end
再びブール値を返す簡単なメソッド -
##this method return Boolean(NOTE THE !! signs before result)
def check_if_user_profile_is_complete
!!User.includes( :profile_pictures,:address,:contact_detail).where("user.id = ?",self)
end
だから、同じメソッドは、何かの代わりにブール値を返します:)。
エラーの処理 - 未定義のメソッド `where 'for#
時には、 ActiveRecord::Relation
ではない返されたレコードのコレクションに対してwhere
クエリを使用することwhere
ます.Heauseは、 Where
句がActiveRecord
ではなくArray
ことを知っています。
これは、 Joins
を使用して正確な解決策があります。
例 : -
id = 10のユーザ(User)ではないアクティブなすべてのユーザプロファイル(UserProfile)を見つける必要があるとします。
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).map(&:user).where.not(:id=>10)
したがって、上記のクエリは、 map
がwhere
句では動作しない array
を返すので、 map
後に失敗しmap
。
しかし、結合を使用して、それを動作させる、
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).joins(:user).where.not(:id=>10)
joins
はmap
ような類似のレコードを出力しmap
が、 Array
ではなく ActiveRecord
なります。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow