获取current_user的总和,可通过js.erb partial访问

Jon*_*ard 1 javascript ruby ruby-on-rails

我有一个模型Expense.rb,用户有很多.可以通过ajax表单添加新费用,因此我有适当的文件设置(create.js.erb,destroy.js.erb ..等)

目前,当通过远程表单提交新费用时,还会在create.js.erb中更新金额总和,这在我的Expense模型中如下所示:

def total_value
    Expense.sum(:amount)
end
Run Code Online (Sandbox Code Playgroud)

create.js.erb:

$('#total').html('$<%= number_with_delimiter(@expense.total_value) %>');

问题是这总结了数据库的所有费用,而我只需找到current_user(我知道无法从模型访问).

在我的控制器内部,在索引操作上,我这样做:

@expenses = current_user.expenses
    @total_value = @expenses.sum(:amount)
Run Code Online (Sandbox Code Playgroud)

这意味着我只需执行以下操作即可在索引视图中为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
Run Code Online (Sandbox Code Playgroud)

我不确定如何将current_user传递给模型中的total_value,以便只计算create js.erb中使用的total_value中的current_user id.

小智 5

Expense.sum(:amount)将所有费用记录输出.

更改

def total_value
    Expense.sum(:amount)
end
Run Code Online (Sandbox Code Playgroud)

至:

def self.total_value
    sum(:amount)
end
Run Code Online (Sandbox Code Playgroud)

会打电话给自己,这样做

current_user.expenses.total_value 
Run Code Online (Sandbox Code Playgroud)

应该工作,如果你这样做Expense.total_value仍然会继续工作.