我有一个有几个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
搜索适用于单个用户,但是当我需要遍历所有用户以获得每个用户的月份/年份时,它不会保存。任何帮助将不胜感激。
答案 0 :(得分:0)
迭代将在每次循环用户时覆盖实例变量。
您可以尝试将month
和year
作为实例变量传递给视图,然后在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
。