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