query: tag:AR

ActiveRecordを読み込んだ状態でirbを使っているときに、TAB補完をしようとすると落ちることが結構な頻度でありました。
原因を調べてみると、補完候補のArrayをsort使用としているところで、Symbolに対して <=> 演算子を呼びだそうとしてエラーが発生しているようです。
補完候補は Object#instance_methods から得ているようなので、なぜSymbolが要素として混入するのかが謎だったのですが、どうやら
Arel::Attribute::Predications クラスが犯人のようです。

ruby>>
PREDICATES = [
:eq, :eq_any, :eq_all, :not_eq, :not_eq_any, :not_eq_all, :lt, :lt_any,
:lt_all, :lteq, :lteq_any, :lteq_all, :gt, :gt_any, :gt_all, :gteq,
:gteq_any, :gteq_all, :matches, :matches_any, :matches_all, :not_matches,
:not_matches_any, :not_matches_all, :in, :in_any, :in_all, :not_in,
:not_in_any, :not_in_all
]

Predications = Class.new do
def self.instance_methods *args
warn "this module is deprecated, please use the PREDICATES constant"
PREDICATES
end
end
<<--

このコードを書いた人は instance_methodsはStringの配列を返すという事を失念していたようですね。
irb/completeはObjectSpaceから補完候補を拾ってくるので、上述のコードがあるせいでSymbolが補完候補配列に混入してしまいます。

回避策としては、irb起動時に以下のようなコードを読み込むなどがあります。

ruby>>
module Arel
class Attribute
class Predications
def self.instance_methods
require 'arel/algebra/attributes/attribute'
Arel::Attribute::PREDICATES.map(&:to_s)
end
end
end
end
<<--

追記

この問題は 1.8.x系のRubyでのみ発生するようです。
thanks
@a_matsuda!

posted by genki genki on Thu 7 Jul 2011 at 12:31 with 0 comments

Gears を使うには

  1. gears_init.js の読み込み
  2. 低レベルAPIを駆使

という面倒な作業が必要になる。

具体的には

html>>

<<--

javascript>>
var db = google.gears.factory.create('beta.database');
db.open("database-demo");
var rs = db.execute("select name from users");
while(rs.isValidRow()) {
name = rs.fieldByName('name');
rs.next();
}
rs.close();
db.close();
<<--

のようなコードが必要になり、今日日こういうのは書きたくない。
そこで、

active_record.js を使う

Aptana が提供してる activejs プロジェクトの ActiveRecord ライブラリを利用すると、以下のようにすっきりする。

html>>

<<--

javascript>>
ActiveRecord.connect(ActiveRecord.Adapters.Gears,'database-demo');
var User = ActiveRecord.create('users', {name:''});
User.create({name:'maiha'});
<<--

RailsのARを忠実にJavaScriptへ移植してあるため、
ARに慣れていればほぼドキュメントなしで使えるのが嬉しい。

javascript>>
maiha = User.findByName('maiha'); // Dynamic Finder
name = maiha.name; // Accessor methods
maiha.name = 'foo';
maiha.save();

User.count();
User.find({all: true, order: 'name'});
<<--

他にも

  • Validation
  • Callback
  • Relation (hasOne, hasMany, belongsTo)
  • Migration

といった機能が実装されており、
ARの移植物としてみても完成度が非常に高い。
ちなみに、js のサイズは compaction なしで200KB程度。

参考

posted by maiha maiha on Mon 19 Oct 2009 at 05:12 with 0 comments

annotate_models
は、テーブルの情報をModelとFixtureのファイルに
コメントとして書き込んでくれる非常に便利なプラグインです。

永く愛用しているプラグインの一つなのですが、
しばらくメンテナンスされていないようなので、
欲しいと思っていたindexに関する情報も出力するようにしてみました。

http://svn.s21g.com/public/rails/plugins/annotate_models_with_index/

こんな感じに、インデックス情報をカラムごとに付加します。

rails>>

== Schema Information

Schema version: 48

Table name: users

id :integer(11) not null, primary key

(* snip *)

mobile_email :string(255) index_users_on_mobile_email(unique)

<<--

posted by genki genki on Thu 24 Jan 2008 at 01:10 with 0 comments

最近は、自分用にRailsの挙動を拡張するために書いた
lib/xxxx_ext.rbが増えてきました。
こういったファイルはconfig/initializer/の直下に
置いても良いのですが、ON/OFFを切り替えやすいので、
config/initializer/libs.rbの中から、require "xxxx_ext"
を呼ぶようにしています。

さて、今回はActiveRecordをさらに便利に使うために、
僕が行っている拡張を紹介します。

lib/active_record_ext.rb

rails>>
module ActiveRecord
class Base
def self.[](arg, *args)
case arg
when Range
find arg.to_a
when Hash
find :all, arg
when :first, :all
find arg, *args
when :last
find(:all, *args).last
when Symbol
send "find_#{arg}", *args
else
find arg, *args
end
end

def update_counters(counters)
  self.class.update_counters id, counters
end

end
end
<<--

どうでしょう、お分かりだと思いますが、ARクラスに
インデクサ (rb_aref) を定義しています。こんな感じに動作します。

pre>>

Site[1].uri
=> "http://www.google.com/"

Site[1,2].map &:uri
=> ["http://www.google.com/", "http://www.wikipedia.org/"]

Site[1..2].map &:uri
=> ["http://www.google.com/", "http://www.wikipedia.org/"]

Site[:last].title
=> "Ruby/Tk チュートリアル"

Site[:by_uri, "http://www.google.com/"].uri
=> "http://www.google.com/"
<<--

実際のアプリケーションコードの中ではあまり使っていないですが、
script/consoleの中で使うのには大変便利です。

最後に、update_countersは、インスタンスメソッドとして
欲しかったので追加しています。
Rails 2.0から仕様が変わった counter_cache については、
日比さんがこちらに記事
既存のモデル/テーブルでcounter_cacheを使う:update_counters
を書いているので参照してみてください。

posted by genki genki on Tue 15 Jan 2008 at 06:20 with 0 comments
Contents rssrss
Leading Smart TV App Development Companies | USA | 4 Way Technologies
Apple TV Developer | TVOS Development | USA | 4 Way Technologies
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Value Transformer
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Tags
AR
Comments rssrss
https://rocksoffrpm.com/exploring-the-extraordinary-superpowe-of-stem-cell-therapy-in-restoring-life-health-and-homo-potency/ https://rocksoffrpm.com/exploring-the-extraordinary-superpowe-of-stem-cell-therapy-in-restoring-life-health-and-homo-potency/: Asking questions are in fact pleasant thing if you... 05/19 21:27
https://lnkm.ee/552d2578 https://lnkm.ee/552d2578: Hey gearheads, ϳust found a stellar [supercar work... 05/19 21:09
https://hoidotquyvietnam.com/question/unlock-the-very-best-singapore-promotions-and-deals-on-kaizenaire-com/ https://hoidotquyvietnam.com/question/unlock-the-very-best-singapore-promotions-and-deals-on-kaizenaire-com/: Kaizenaire.cⲟm excels as the supreme curator οf Si... 05/19 16:49
https://battlefield2042Hq.com https://battlefield2042Hq.com: Hmm is anyone else encountering problems with the ... 05/19 15:09
https://tragamonedasar.com/big-bass-bonanza/ https://tragamonedasar.com/big-bass-bonanza/: Anotá un registro de todo lo que gastás y sacás. S... 05/19 14:48
http://3Dpowertools.com/cgi-bin/animations.cgi?Animation=8&ReturnURL=http%3A%2F%2FAgromechanica.ru%2Fbitrix%2Fredirect.php%3Fgoto%3Dhttps%3A%2F%2Fledcoms.com%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Findoor-fixed%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Foutdoor-fixed%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Findoor-rental%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Foutdoor-rental%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Fled-floor%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Fflexible-led-mesh%2F%2Chttps%3A%2F%2Fledcoms.com%2Findoor-fine-pitch%2F%2Chttps%3A%2F%2Fledcoms.com%2Findoor-ultra-slim%2F%2Chttps%3A%2F%2Fledcoms.com%2Foutdoor-front-service%2F%2Chttps%3A%2F%2Fledcoms.com%2Foutdoor-3d-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Findoor-rental-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Foutdoor-rental-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Frental-led-floor%2F%2Chttps%3A%2F%2Fledcoms.com%2Ffixed-led-floor%2F%2Chttps%3A%2F%2Fledcoms.com%2Fflexible-led-mesh-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fauto-show%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fbillboard%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fcommercial-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fconference%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fcorporate-events%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Flive-concert%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Flive-events%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fshopping-mall%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fretail-store%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fshowroom%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fsport-event%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Ftv-studio%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fgallery%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Ffaq%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fabout-us%2F http://3Dpowertools.com/cgi-bin/animations.cgi?Animation=8&ReturnURL=http%3A%2F%2FAgromechanica.ru%2Fbitrix%2Fredirect.php%3Fgoto%3Dhttps%3A%2F%2Fledcoms.com%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Findoor-fixed%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Foutdoor-fixed%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Findoor-rental%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Foutdoor-rental%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Fled-floor%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fproduct%2Fflexible-led-mesh%2F%2Chttps%3A%2F%2Fledcoms.com%2Findoor-fine-pitch%2F%2Chttps%3A%2F%2Fledcoms.com%2Findoor-ultra-slim%2F%2Chttps%3A%2F%2Fledcoms.com%2Foutdoor-front-service%2F%2Chttps%3A%2F%2Fledcoms.com%2Foutdoor-3d-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Findoor-rental-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Foutdoor-rental-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Frental-led-floor%2F%2Chttps%3A%2F%2Fledcoms.com%2Ffixed-led-floor%2F%2Chttps%3A%2F%2Fledcoms.com%2Fflexible-led-mesh-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fauto-show%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fbillboard%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fcommercial-display%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fconference%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fcorporate-events%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Flive-concert%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Flive-events%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fshopping-mall%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fretail-store%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fshowroom%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Fsport-event%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fapplications%2Ftv-studio%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fgallery%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Ffaq%2F%2Chttps%3A%2F%2Fledcoms.com%2Fhome%2Fabout-us%2F: Thanks for ones marvelous posting! I definitely en... 05/19 13:41
https://Robloxrealm.com/ https://Robloxrealm.com/: Hey there! Someone in my Myspace group shared this... 05/19 10:18
http:// http://: Please let me know if you're looking for a writer ... 05/19 04:45