2013-12-13 4 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 

После некоторого прочтения ш ould кажется, что может быть проблема с моим вызовом select в области, так как мне нужно указать все атрибуты моделей для успешного вызова с помощью 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' - очень плохая практика! Никакие связанные идентификаторы не должны быть доступны через params. Это позволит опытному пользователю связать члена с произвольным членством. –

ответ

2

Я бы не сделал этого в области, но в вспомогательном методе. Таким образом, вы можете захватить связанные записи и просто вызвать свой метод, чтобы вернуть общее количество.

Что-то вдоль линий этого:

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

Теперь, хранить соответствующие записи в виде @memberships переменной (внутри контроллера), а затем, на ваш взгляд, использовать <%= membership_sum(@memberships) %>

+0

ok, действительно понравился бы пример, если у вас есть время..что-то, что я могу посмотреть и узнать, спасибо – Richlewis

+1

Просто небольшое улучшение: 'memberships.map (&: стоимость) .sum.round' –

+0

Я намеренно сохранил его просто для ясности, но мне нравится ваш ответ @DamienRoche – Donovan

Смежные вопросы