2013-12-13 143 views
1

我似乎無法得到一個範圍的結果顯示在我看來,因爲我得到這個錯誤消息。我試圖獲得所有的會員數量爲一天加起來並顯示爲總共缺少屬性錯誤Rails

missing attribute: membership_id 

我的模型和範圍

class Member < ActiveRecord::Base 
belongs_to :membership 
accepts_nested_attributes_for :membership 

attr_accessible :membership_id, :forename, :middlename, :surname, :house_no, :house_name, :street, :town, :postcode, :home_tel, :mobile_tel, :work_tel, :email, :start_date, :expiry_date 

scope :new_memberships_cash_today, ->() { 
joins(:membership).where(:start_date => Date.today).select('ROUND(SUM(memberships.cost), 2)') 
} 
end 

class Membership < ActiveRecord::Base 
has_many :members, :dependent => :destroy 
attr_accessible :membership_type, :cost 
end 

然後我看來

columns do 

    #Total amount in £ for New Memberships today 
    column do 
    panel "Cash Today", :class => 'NewAmountMemberships' do 
    table_for Member.new_memberships_cash_today do 
     column 'Total cash' do |c| 
     c.membership.map { |e| [e.cost, e.id] } 
     end 
    end  
    end 
    end 
    end 

一些看完後W似乎可能有我的選擇範圍內的呼叫有問題,因爲我需要指定所有的模型屬性以使用Active Record成功呼叫?

因爲我內選擇我不確定如何增加更多的屬性,如果是這樣,即使

任何幫助表示讚賞

我已經運行在控制檯與此範圍內的情況下執行總和是什麼返回

Member Load (0.1ms) SELECT ROUND(SUM(memberships.cost), 2) FROM `members` INNER JOIN `memberships` ON `memberships`.`id` = `members`.`membership_id` WHERE `members`.`start_date` = '2013-12-13' 
=> #<ActiveRecord::Relation [#<Member id: nil>]> 
+0

你的範圍返回一個對象,唯一可以從該對象訪問的東西就是總和。我可以看到你試圖從範圍訪問對象的成員資格。由於它沒有membership_id,你得到的錯誤 – usha

+0

謝謝,所以有關如何調整我的範圍,仍然返回成本模型中列成本的總和的想法? – Richlewis

+0

'attr_accessible:membership_id'是非常不好的做法!不應通過params訪問關聯的ID。這將允許精明的用戶將會員與任意的會員關聯起來。 –

回答

2

我不會在一個範圍內,但在輔助方法中做到這一點。這樣你可以獲取關聯的記錄,只需調用你的方法返回總數。沿此線

東西:

def membership_sum(memberships = []) 
    sum = 0 
    memberships.each { |membership| sum += membership.cost } 
    sum.round 
end 

現在,存儲(從你的控制器內)在@memberships變量相關的記錄,然後,在你看來,使用<%= membership_sum(@memberships) %>

+0

好吧,真的很感激一個例子,如果你有時間..我可以看看,學習的東西,謝謝 – Richlewis

+1

只是一個小的改進:'memberships.map(&:cost).sum.round' –

+0

我故意保留它簡單明瞭,但我喜歡你的答案@DamienRoche – Donovan