我有一个模型Expense.rb,用户有很多。新的费用可以通过ajax表格添加,因此我有适当的文件设置(create.js.erb,destroy.js.erb ..等)
目前,当通过远程表单提交新费用时,还会在create.js.erb中更新金额总和,这在我的Expense模型中如下所示:
def total_value
Expense.sum(:amount)
end
create.js.erb:
$('#total').html('$<%= number_with_delimiter(@expense.total_value) %>');
问题是这总结了数据库中的所有费用,而我只需找到current_user(我知道无法从模型中访问)。
在我的控制器中,在索引操作上,我这样做:
@expenses = current_user.expenses
@total_value = @expenses.sum(:amount)
这意味着我只需执行以下操作即可在索引视图中为current_user获取它:
<%= number_with_delimiter(@total_value) %>
但至于创建动作:
def create
@expense = Expense.new(secure_params)
@expense.user = User.find(current_user.id)
@expense.save
respond_to do |format|
format.html { redirect_to index_expense_path }
format.js
end
end
我不确定如何将current_user传递给模型中的total_value,以便只计算create js.erb中使用的total_value中的current_user id。
答案 0 :(得分:5)
Expense.sum(:amount)将所有费用记录输出。
更改
def total_value
Expense.sum(:amount)
end
为:
def self.total_value
sum(:amount)
end
会打电话给自己,所以这样做
current_user.expenses.total_value
应该有用,如果你做Expense.total_value
仍然会继续工作。
答案 1 :(得分:0)
问题是这需要数据库中的所有费用 找到current_user(我知道无法访问) 模特)。
也许您可以使用scope
&amp;将user id
传递给它:
#app/controllers/expenses_controller.rb
def total_votes
Expense.user(current_user).sum(:amount)
end
#app/models/expense.rb
Class Expense < ActiveRecord::Base
scope :user, ->(user) { where(user_id: user.id) }
end
答案 2 :(得分:0)
您的用户模型中不需要total_expenses方法:
Class User
has_many :expenses
def total_expenses
expenses.sum(:amount)
end
end
然后你可以打电话
current_user.total_expenses