我正在开发维护应用程序。基本上我在我的代码中有一个方法,它由多个方法调用。这个方法基本上形成了sql查询,如下所示。
def filter_data
data = Student.all
data = data.where(:id => params[:id]) if params[:id]
data = data.where(:roll_no => params[:roll_no]) if params[:roll_no]
return data
end
我在我的应用程序的许多地方使用此方法,如下所示
def get_user_data
data = filter_data
data.pluck("sum(marks)")
end
现在的问题是,我想将内部联接添加到"学生" table filter_data
方法中的表。现在,"标记"列在两个表中我将不得不在" get_user_data"中添加别名。方法如下所示。
data.pluck("sum(students.marks)")
添加别名不是问题,但我必须在使用"filter_data"
方法的应用程序中添加别名。这是一个非常耗时的过程,我想避免它。有没有办法告诉活动记录使用" xxx"在sql查询中不存在别名时作为别名。
如果有人对此问题有任何解决方案,请与我们联系。
答案 0 :(得分:0)
您可以在模型中添加别名
# alias_attribute :new_column_name, :column_name_in_db
alias_attribute :model_name_marks, :marks
所以,可能你应该能够使用没有sql别名的新名称。
注意:未经测试但值得一试......
另外,我认为,filter_data
方法可以简化为一个查询而不是多个..
student.rb
中的
scope :filter_by_id, ->(id) { where(id: id) if id.present? }
scope :filter_by_roll_no, ->(roll_no) { where(roll_no: roll_no) if roll_no.present? }
然后你的方法就变成了,
def filter_data
Student.filter_by_id(params[:id]).filter_by_roll_no(params[:roll_no])
end