【问题标题】:Fetching a sum for the current_user, accessible through a js.erb partial获取 current_user 的总和,可通过 js.erb 部分访问
【发布时间】:2014-04-04 16:31:07
【问题描述】:

我有一个模型 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 中使用的 total_value 中的 current_user id 求和。

【问题讨论】:

  • @RajeshCO 我正在尝试确定正确的 MVC 方法来执行此操作,我之前看过该链接,不确定里面的任何答案是否是正确的方法。

标签: javascript ruby-on-rails ruby


【解决方案1】:

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 仍然可以工作。

【讨论】:

    【解决方案2】:

    问题是这会汇总数据库中的所有费用,而我需要 只查找 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
    

    【讨论】:

    • 感谢您的回答。最终不需要使用范围。
    【解决方案3】:

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

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

    然后你就可以打电话了

    current_user.total_expenses 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多