I’m getting the following error:
undefined method `base_amount’ for []:Array
It’s talking about line 6
1: def pay_commission
2: @product = Product.find(params[:id])
3: pay = PayRate.find(:all,
4: :select => “base_amount, special_amount”,
5: :conditions => [“deleted_yn=0 and pay_type_id = ?”,
@product.pay_type_id])
6: @product.amount = pay.base_amount
7: @product.special = pay.special_amount
8: @product.status = ‘Paid’
9: end
If i take out lines 6 and 7, everything works fine. Also, when i look
at the terminal session, the correct SQL is created and I can run that
in MySQL to get the correct fields and values. Anyone have any ideas?
Is deleted_yn is actually a boolean field if a pay rate has been deleted
or
not. You could call this deleted.
Then you could do:
has_many :pay_rates, :conditions => “deleted = 0”
in your Product model.
The reason why it’s giving you that error is because you’re retreving
MANY
payrates instead of just the one. Perhaps with this new code you can do
@
product.pay_rates.first.amount
On Jan 21, 2008 4:21 PM, George P.
[email protected]
wrote:
4: :select => “base_amount, special_amount”,
Posted via http://www.ruby-forum.com/.
–
Ryan B.
Feel free to add me to MSN and/or GTalk as this email.
Hi,
pay = PayRate.find(:all,
:select => “base_amount, special_amount”,
:conditions => [“deleted_yn=0 and pay_type_id = ?”,
@product.pay_type_id])
You got the array of records from PayRate table because you find all
records based on that conditions… So you have to use loop
you can try this
pay.each {|p| puts p.base_amount}
If you use find :first your code is correct
@product.amount = pay.base_amount
@product.special = pay.special_amount
Regards
Abirami
Thanks a lot. That fixed it
Abirami S. wrote:
Hi,
pay = PayRate.find(:all,
:select => “base_amount, special_amount”,
:conditions => [“deleted_yn=0 and pay_type_id = ?”,
@product.pay_type_id])
You got the array of records from PayRate table because you find all
records based on that conditions… So you have to use loop
you can try this
pay.each {|p| puts p.base_amount}
If you use find :first your code is correct
@product.amount = pay.base_amount
@product.special = pay.special_amount
Regards
Abirami