过滤属性不起作用的Rails

时间:2018-03-29 20:48:43

标签: ruby-on-rails

我有一个有几个has_many关联的用户类。我有一个净付费页面,将显示每个用户及其关联。我希望能够过滤以仅显示所选月份/年份的关联,而我目前所拥有的关联似乎不起作用。

用户控制器

 def net_pay
    @users = User.all.order(driver_id: :asc)
    @users.each do |user|
      search_date(user)
    end
 end

def show
  if params[:month_select]
    search_date(@user)
    total_deductions
  else
    @trips
  end
end

def search_date(user)
  @trips = user.trips.month_year(params[:month_select],params[:year_select])
  @advances = user.advances.month_year(params[:month_select],params[:year_select])
  @prorates = user.prorates.month_year(params[:month_select],params[:year_select])
  @icbcs = user.icbcs.month_year(params[:month_select],params[:year_select])
  @dentals = user.dentals.month_year(params[:month_select],params[:year_select])
  @others = user.others.month_year(params[:month_select],params[:year_select])
  @admin_expenses = user.admin_expenses.month_year(params[:month_select],params[:year_select])
end

搜索适用于单个用户,但是当我需要遍历所有用户以获得每个用户的月份/年份时,它不会保存。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

迭代将在每次循环用户时覆盖实例变量。

您可以尝试将monthyear作为实例变量传递给视图,然后在user.trips.month_year(@month, @year)的迭代中调用@users。或者,您可以创建一个对象,该对象获取用户,月份和年份的参数,并返回您期望的值。 @net_pay_users = @users.map { |user| UserNetPayBuilder.new(user, params[:month_select], params[:year_select]) }然后在您的视图中迭代@net_pay_users

def initialize(user, month, year)
  self.user = user
  ...
end

def trips
  user.trips.month_year(month, year)
end

您可以进一步重构构建器以接受一组用户并返回一组有用的对象,而不是使用控制器内的map