获取current_user的金额,可通过 js.erb 部分访问

Fetching a sum for the current_user, accessible through a js.erb partial

本文关键字:erb js 访问 可通过 current user 金额 获取      更新时间:2023-09-26

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

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

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,以便仅对创建 js.erb 中使用的 current_user id 求和total_value。

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仍然会继续工作。

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

也许您可以使用scope并将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

用户模型中不需要total_expenses方法吗:

Class User
  has_many :expenses
  def total_expenses
    expenses.sum(:amount)
  end
end

然后你可以打电话

current_user.total_expenses