Hello, I am developing a rails 3.1 app. My Gemfile has shoulda gems Gemfile .. gem "shoulda" gem "shoulda-matchers" In a model spec I have spec file it { should have_indices([:user, :currency]) } And I get this error... NoMethodError: undefined method `has_indices?'' for #<Balance:0xf3b860c>
On Sep 2, 2011, at 4:12 AM, slavix wrote:> Hello, > I am developing a rails 3.1 app. My Gemfile has shoulda gems > Gemfile > .. > gem "shoulda" > gem "shoulda-matchers"You only need shoulda-matchers if you''re using rspec.> In a model spec I have > spec file > it { should have_indices([:user, :currency]) } > > And I get this error... > > NoMethodError: > undefined method `has_indices?'' for #<Balance:0xf3b860c>When there is no have_xxx method defined, rspec-expectations implements method_missing such that it assumes you want to send the object the has_xxx? predicate. What your experiencing suggests that there is no have_indices method. Looking at http://rdoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Matchers/ActiveRecord, I see a singular have_db_index matcher, but I don''t see a pluralized one, so perhaps this method doesn''t exist. If it does, then something is wrong with your configuration, as it is not being made available. HTH, David
Thanks, I updated spec with correct statements it { should have_db_index([:user, :currency, :tradable]) } ---------- and my db (dev and test) has the indexes Indexes: Action Keyname Type Unique Packed Field Cardinality Collation Null Comment Edit Drop PRIMARY BTREE Yes No id 0 A Edit Drop index_balances_on_currency_id BTREE No No currency_id 0 A YES Edit Drop index_balances_on_tradable_id BTREE No No tradable_id 0 A YES Edit Drop index_balances_on_user_id BTREE No No user_id 0 but I get an error running rspec 2) Balance shoulda validations Failure/Error: it { should have_db_index([:user, :currency, :tradable]) } Expected Balance to have a index on columns user and currency and tradable () On Sep 2, 6:17?am, David Chelimsky <dchelim... at gmail.com> wrote:> On Sep 2, 2011, at 4:12 AM, slavix wrote: > > > Hello, > > I am developing a rails 3.1 app. My Gemfile has shoulda gems > > Gemfile > > .. > > gem "shoulda" > > gem "shoulda-matchers" > > You only need shoulda-matchers if you''re using rspec. > > > In a model spec I have > > spec file > > ?it { should have_indices([:user, :currency]) } > > > And I get this error... > > > NoMethodError: > > ? ? ? undefined method `has_indices?'' for #<Balance:0xf3b860c> > > When there is no have_xxx method defined, rspec-expectations implements method_missing such that it assumes you want to send the object the has_xxx? predicate. What your experiencing suggests that there is no have_indices method. Looking athttp://rdoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Ma..., I see a singular have_db_index matcher, but I don''t see a pluralized one, so perhaps this method doesn''t exist. If it does, then something is wrong with your configuration, as it is not being made available. > > HTH, > David > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
now getting Failure/Error: it { should have_db_index([:user, :currency, :tradable]) } Expected Balance to have a index on columns user and currency and tradable () but the indexes are in the db.. (dev and test) Indexes: Action Keyname Type Unique Packed Field Cardinality Collation Null Comment Edit Drop PRIMARY BTREE Yes No id 0 A Edit Drop index_balances_on_currency_id BTREE No No currency_id 0 A YES Edit Drop index_balances_on_tradable_id BTREE No No tradable_id 0 A YES Edit Drop index_balances_on_user_id BTREE No No user_id 0 A YES my migration has def self.up create_table :balances do |t| t.belongs_to :user, :nil => false t.belongs_to :currency, :nil => false t.belongs_to :tradable, :nil => false t.decimal :amount, :precision => 16, :scale => 8, :default => 0.0 t.timestamps end add_index :balances, :user_id add_index :balances, :currency_id add_index :balances, :tradable_id end On Sep 2, 6:17?am, David Chelimsky <dchelim... at gmail.com> wrote:> On Sep 2, 2011, at 4:12 AM, slavix wrote: > > > Hello, > > I am developing a rails 3.1 app. My Gemfile has shoulda gems > > Gemfile > > .. > > gem "shoulda" > > gem "shoulda-matchers" > > You only need shoulda-matchers if you''re using rspec. > > > In a model spec I have > > spec file > > ?it { should have_indices([:user, :currency]) } > > > And I get this error... > > > NoMethodError: > > ? ? ? undefined method `has_indices?'' for #<Balance:0xf3b860c> > > When there is no have_xxx method defined, rspec-expectations implements method_missing such that it assumes you want to send the object the has_xxx? predicate. What your experiencing suggests that there is no have_indices method. Looking athttp://rdoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Ma..., I see a singular have_db_index matcher, but I don''t see a pluralized one, so perhaps this method doesn''t exist. If it does, then something is wrong with your configuration, as it is not being made available. > > HTH, > David > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
I moved your post to the bottom. Please read http://idallen.com/topposting.html On Sep 2, 2011, at 5:58 PM, slavix wrote:> On Sep 2, 6:17 am, David Chelimsky <dchelim... at gmail.com> wrote: >> On Sep 2, 2011, at 4:12 AM, slavix wrote: >> >>> Hello, >>> I am developing a rails 3.1 app. My Gemfile has shoulda gems >>> Gemfile >>> .. >>> gem "shoulda" >>> gem "shoulda-matchers" >> >> You only need shoulda-matchers if you''re using rspec. >> >>> In a model spec I have >>> spec file >>> it { should have_indices([:user, :currency]) } >> >>> And I get this error... >> >>> NoMethodError: >>> undefined method `has_indices?'' for #<Balance:0xf3b860c> >> >> When there is no have_xxx method defined, rspec-expectations implements method_missing such that it assumes you want to send the object the has_xxx? predicate. What your experiencing suggests that there is no have_indices method. Looking athttp://rdoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Ma..., I see a singular have_db_index matcher, but I don''t see a pluralized one, so perhaps this method doesn''t exist. If it does, then something is wrong with your configuration, as it is not being made available.> Thanks, > I updated spec with correct statements > > it { should have_db_index([:user, :currency, :tradable]) } > ---------- > and my db (dev and test) has the indexes > > Indexes: > Action Keyname Type Unique Packed Field Cardinality Collation Null > Comment > Edit Drop PRIMARY BTREE Yes No id 0 A > Edit Drop index_balances_on_currency_id BTREE No No currency_id 0 A > YES > Edit Drop index_balances_on_tradable_id BTREE No No tradable_id 0 A > YES > Edit Drop index_balances_on_user_id BTREE No No user_id 0 > > but I get an error running rspec > 2) Balance shoulda validations > Failure/Error: it { should > have_db_index([:user, :currency, :tradable]) } > Expected Balance to have a index on columns user and currency > and tradable ()The indexes are on xxx_id. Try { should have_db_index([:user_id, :currency_id, :tradable_id]) }
My guess is that it is checking for an compound index on all of those fields. Try specifying them individually and not in an array. On Fri, Sep 2, 2011 at 7:07 PM, slavix <mikerin.slava at gmail.com> wrote:> now getting > Failure/Error: it { should > have_db_index([:user, :currency, :tradable]) } > ? ? ? Expected Balance to have a ?index on columns user and currency > and tradable () > > but the indexes are in the db.. (dev and test) > Indexes: > Action ? ? ? ? ?Keyname ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Type > Unique ?Packed ?Field ? Cardinality ? ? Collation ? ? ? Null ? ?Comment > Edit ? ?Drop ? ?PRIMARY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BTREE ? Yes ? ? No ? ? ?id ? ? ?0 > A > Edit ? ?Drop ? ?index_balances_on_currency_id ? BTREE ? No ? ? ?No ? ? ?currency_id ? ? 0 ? ? ? A > YES > Edit ? ?Drop ? ?index_balances_on_tradable_id ? BTREE ? No ? ? ?No ? ? ?tradable_id ? ? 0 ? ? ? A > YES > Edit ? ?Drop ? ?index_balances_on_user_id ? ? ? ? ? ? ? BTREE ? No ? ? ?No ? ? ?user_id 0 ? ? ? A > YES > > my migration has > def self.up > ? ?create_table :balances do |t| > ? ? ?t.belongs_to :user, :nil => false > ? ? ?t.belongs_to :currency, :nil => false > ? ? ?t.belongs_to :tradable, :nil => false > ? ? ?t.decimal :amount, :precision => 16, :scale => 8, :default => > 0.0 > > ? ? ?t.timestamps > ? ?end > ? ?add_index :balances, :user_id > ? ?add_index :balances, :currency_id > ? ?add_index :balances, :tradable_id > ?end > > > On Sep 2, 6:17?am, David Chelimsky <dchelim... at gmail.com> wrote: >> On Sep 2, 2011, at 4:12 AM, slavix wrote: >> >> > Hello, >> > I am developing a rails 3.1 app. My Gemfile has shoulda gems >> > Gemfile >> > .. >> > gem "shoulda" >> > gem "shoulda-matchers" >> >> You only need shoulda-matchers if you''re using rspec. >> >> > In a model spec I have >> > spec file >> > ?it { should have_indices([:user, :currency]) } >> >> > And I get this error... >> >> > NoMethodError: >> > ? ? ? undefined method `has_indices?'' for #<Balance:0xf3b860c> >> >> When there is no have_xxx method defined, rspec-expectations implements method_missing such that it assumes you want to send the object the has_xxx? predicate. What your experiencing suggests that there is no have_indices method. Looking athttp://rdoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Ma..., I see a singular have_db_index matcher, but I don''t see a pluralized one, so perhaps this method doesn''t exist. If it does, then something is wrong with your configuration, as it is not being made available. >> >> HTH, >> David >> _______________________________________________ >> rspec-users mailing list >> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Yes. Thank you. I changed the code to list indices one at a time and it worked. it { should have_db_index(:currency_id) } it { should have_db_index(:user_id) } On Sep 3, 5:38?am, Michael Guterl <mgut... at gmail.com> wrote:> My guess is that it is checking for an compound index on all of those > fields. ?Try specifying them individually and not in an array. > > > > > > > > > > On Fri, Sep 2, 2011 at 7:07 PM, slavix <mikerin.sl... at gmail.com> wrote: > > now getting > > Failure/Error: it { should > > have_db_index([:user, :currency, :tradable]) } > > ? ? ? Expected Balance to have a ?index on columns user and currency > > and tradable () > > > but the indexes are in the db.. (dev and test) > > Indexes: > > Action ? ? ? ? ?Keyname ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Type > > Unique ?Packed ?Field ? Cardinality ? ? Collation ? ? ? Null ? ?Comment > > Edit ? ?Drop ? ?PRIMARY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BTREE ? Yes ? ? No ? ? ?id ? ? ?0 > > A > > Edit ? ?Drop ? ?index_balances_on_currency_id ? BTREE ? No ? ? ?No ? ? ?currency_id ? ? 0 ? ? ? A > > YES > > Edit ? ?Drop ? ?index_balances_on_tradable_id ? BTREE ? No ? ? ?No ? ? ?tradable_id ? ? 0 ? ? ? A > > YES > > Edit ? ?Drop ? ?index_balances_on_user_id ? ? ? ? ? ? ? BTREE ? No ? ? ?No ? ? ?user_id 0 ? ? ? A > > YES > > > my migration has > > def self.up > > ? ?create_table :balances do |t| > > ? ? ?t.belongs_to :user, :nil => false > > ? ? ?t.belongs_to :currency, :nil => false > > ? ? ?t.belongs_to :tradable, :nil => false > > ? ? ?t.decimal :amount, :precision => 16, :scale => 8, :default => > > 0.0 > > > ? ? ?t.timestamps > > ? ?end > > ? ?add_index :balances, :user_id > > ? ?add_index :balances, :currency_id > > ? ?add_index :balances, :tradable_id > > ?end > > > On Sep 2, 6:17?am, David Chelimsky <dchelim... at gmail.com> wrote: > >> On Sep 2, 2011, at 4:12 AM, slavix wrote: > > >> > Hello, > >> > I am developing a rails 3.1 app. My Gemfile has shoulda gems > >> > Gemfile > >> > .. > >> > gem "shoulda" > >> > gem "shoulda-matchers" > > >> You only need shoulda-matchers if you''re using rspec. > > >> > In a model spec I have > >> > spec file > >> > ?it { should have_indices([:user, :currency]) } > > >> > And I get this error... > > >> > NoMethodError: > >> > ? ? ? undefined method `has_indices?'' for #<Balance:0xf3b860c> > > >> When there is no have_xxx method defined, rspec-expectations implements method_missing such that it assumes you want to send the object the has_xxx? predicate. What your experiencing suggests that there is no have_indices method. Looking athttp://rdoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Ma..., I see a singular have_db_index matcher, but I don''t see a pluralized one, so perhaps this method doesn''t exist. If it does, then something is wrong with your configuration, as it is not being made available. > > >> HTH, > >> David > >> _______________________________________________ > >> rspec-users mailing list > >> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > > rspec-users mailing list > > rspec-us... at rubyforge.org > >http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users