2013-12-13 2 views
1

이 오류 메시지가 표시되면서 내보기에 표시 할 범위의 결과를 얻지 못하는 것 같습니다. 총 일일 총 회원 수를 합산하여 총계로 표시하려고합니다.누락 된 속성 오류 레일

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 

일부 승을 읽은 후 ould는 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

귀하의 범위 반환을 사용 단일 개체 및 그 개체에서 액세스 할 수있는 유일한 것은 합계입니다. 범위에서 개체의 멤버십에 액세스하려고하는 것을 볼 수 있습니다. member_id가 없으므로 오류가 발생했습니다. – usha

+0

감사합니다. 내 범위를 조정하여 멤버십 모델에서 열 비용의 합계를 반환하는 방법에 대한 아이디어가 있습니까? – Richlewis

+0

'attr_accessible : membership_id'는 매우 나쁜 습관입니다! 관련 id는 params를 통해 액세스 할 수 없습니다. 이렇게하면 정통한 사용자가 회원을 임의의 회원으로 연결할 수 있습니다. –

답변

2

나는 범위에서 이것을 돕지 만 도우미 방법은 사용하지 않을 것이다. 그렇게하면 관련 레코드를 가져올 수 있으며 전체를 반환하는 메서드를 호출 할 수 있습니다. 이의 라인을 따라

뭔가 : 이제

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

(컨트롤러 내에서)를 @memberships 변수에 관련 레코드를 저장하고,보기에, <%= membership_sum(@memberships) %>

+0

괜찮다면 시간이 있다면 예를 들어 주시면 감사하겠습니다. 감사합니다. – Richlewis

+1

감사합니다. 약간의 개선 :'membershiphips.map (& : cost) .sum.round' –

+0

나는 그것을 의도적으로 유지했다. 선명도에 대한 단순하지만, 당신의 대답을 좋아해 @DamienRoche – Donovan