【发布时间】:2013-12-13 14:39:38
【问题描述】:
当我收到此错误消息时,我似乎无法在视图中显示范围的结果。我正在尝试将当天的所有会员数量加起来并显示为总数
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
经过一番阅读,似乎我的 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>]>
【问题讨论】:
-
您的作用域返回一个对象,您可以从该对象访问的唯一内容就是总和。我可以看到您试图从范围内访问对象的成员资格。由于它没有membership_id,因此您会收到错误
-
谢谢,所以关于如何调整我的范围以仍然返回成员模型中的列成本总和的任何想法?
-
attr_accessible :membership_id是非常糟糕的做法!不应通过参数访问任何关联的 id。这将允许精明的用户将成员与任意成员相关联。 -
那么如果我将其更改为membership_attributes 或者仍然可以访问,我认为我们必须包含这个以便可以访问关联的模型属性?
标签: ruby-on-rails ruby activerecord scope