railsノートactiverecord 1

3516 ワード

railsノートactiverecord


modelのプロパティ(性質が変化している場合)を変更した後、奇妙なエラーを避けるために再起動したほうがいいです.

自動タイプ変換:

  • int, integer => Fixnum
  • decimal, numeric => Float
  • clob, blob, text => String
  • interval, date => Date
  • float, double => FLoat
  • char, varchar, string => String
  • datetime, time => Time
  • boolean=>字面値
  • に注意
    1 decimalからrubyへのfloat演算後精度可能_保証できません2データはbooleanの特殊な点を示す:Booleanはmodelobjを処理する.name1? railsのbooleanにアクセスするには、rubyに内蔵された低エネルギーbooleanと比較します.
  • rails:0,「0」,「f」,「false」,「nil,falseはfalseであり,その他はtrue
  • である.
  • ruby:nil,falseはfalse,その他はtrue_booleanをカスタマイズするには、自分でname 1を書くことができますか?の方法
  • 义齿


    ModelClass.columns.map{|col|col.name}column ModelClassを表示します.columns_hashはカラム情報を返すhash

    データへのアクセス


    objectを使用します.propertyアクセスは、object[:property]を使用してアクセスすることもできます(rubyと単語が競合している場合)後者は、デフォルトの動作を上書きするために使用することもできます.たとえば、
    class Account < ActiveRecord::Base
    
        def balance=(value)
    
            raise BalanceTooLow if value < MINIMUM_LEVEL
    
            self[:balance] = value
    
        end
    
    end
    
    

    modelobj 1を追加する.name1_before_type_castは元のデータオブジェクト(変換されていない)を得ることができます.
    serialize :last_FiveはYAMLを使用して任意のオブジェクトをTEXTフィールドにシーケンス化できますが、YAMLを識別するプログラムのみが読み込むことができます.
    set_primary_key 'another_column'はrailsをanotherに従わせることができますcolumnはidの場合に使用されますが、オブジェクトレベルでアクセスするにはidプロパティが使用されます(another_columnにマッピングされます).
    establish_の使用Connectionメソッドは、構成とは異なるデータベースに接続できます.メソッドで無視されているパラメータは、構成からデフォルト値を読み出すか

    オブジェクトアクション


    作成


    newはメモリの中で、saveは後でやっとデータの苦しみに着きますOrder.new do |o| ... o.save end
    createは一歩で終わり、1つのhashとhashの配列を受け入れて複数を作成し、order=Orderなどの作成した配列を返すことができます.create(params)(httpから直接パラメータを持って作成)

    find検索


    findがサポートするパラメータ
  • :all or :first
  • :conditinos conditionsがサポートする参加
  • 直接sql conditions=>"..."
  • 使用?パラメータconditons=>["...a]
  • conditons=>[".:name",hash]
  • を使用
  • :order
  • :limit
  • :offset
  • :include

  • join指令、あまり使わないかも???


    LineItem.find(:all, :conditions => "pr.title = 'Programming Ruby'", :joins => "as li inner join products as pr on li.product_id = pr.id")
    Order.count(サポートされているパラメータと:condition類似)はレコード数を取得できます.
    デフォルトではidに従ってfindは異常を報告しませんが、自分の複雑なfindは空のレコード(nil or[])ObjectAを返すだけです.find_by_sqlはフリーフィルObjectAを生成できますが、変更する場合はload idを忘れないでください.
    find_(all)_by_A_and_B(a,b)(andのみサポート)はfind(:first(:all)::conditions=>'A=?and B=?',a,b)
    reload再読み込み
  • saveはtrue false
  • を返す
  • save!テーブルにlock_がある場合はnilまたはexceptionを返します.version int default 0フィールドは、楽観ロック
  • を自動的に使用します.
  • deleteとdelete_allは直接削除されます
  • destoryとdestory_allはオブジェクトをメモリに読み込み、すべてのcallbackを呼び出して削除します(前の速さはありません)
  • 取引


    railsではtrasactionが実現され、trasaction(obj 1,objec 2)で呼び出すと自動的にrollbackメモリの中のオブジェクトが呼び出されます
    railsに組み込まれたsave、deleteメソッド(複数のsqlをもたらす可能性がある)はデフォルトでトランザクション(原子)であり、トランザクションを追加する必要はありません.
    railsはデータベース間トランザクション(少なくとも現在)をサポートしていません.次の簡単なシミュレーションスキームがあります.
    User.transaction(user) do
    
        Account.transaction(account) do
    
            account.calculate_fees
    
            user.date_fees_last_calculated = Time.now
    
            user.save
    
            account.save
    
        end
    
    end
    
    

    ただしこれはシミュレーションにすぎず,実行期間エラーであればロールバックできるが,user commitの場合エラーであれば内部のaccountはcommit済みでロールバックできない.