如何解决如何在Ruby on Rails 5.2中优化和干燥范围?
为了使我的应用程序干燥,我在application_record.rb文件中定义了“可见”范围(所有表都存在):
scope :visible,-> { where "is_active" }
当我查询对象列表时,如果需要确定数据范围,则将以下int编写为控制器:
def index
@values_lists = ValuesList.joins(requested_values_lists).visible.search(params[:criteria]).
select(index_fields).order(order_by).paginate(page: params[:page],:per_page => paginate_lines)
实际上,此values_lists表链接到users表(定义所有者)和business_areas表(定义父表)。为了优化查询,我尝试使用Arel在同一查询中检索values_list,父级和所有者:
def values_lists
ValuesList.arel_table
end
def values_lists_parent
BusinessArea.arel_table.alias('parent')
end
def values_lists_owner
User.arel_table.alias('owner')
end
def requested_values_lists
values_lists.
join(values_lists_parent).on(values_lists[:business_area_id].eq(values_lists_parent[:id])).
join(values_lists_owner).on(values_lists[:owner_id].eq(values_lists_owner[:id])).
join_sources
end
def index_fields
[values_lists[:id],values_lists[:code],values_lists[:name],values_lists[:description],values_lists[:status_id],values_lists[:updated_by],values_lists[:updated_at],values_lists_parent[:code],values_lists_owner[:name]]
end
在没有范围的情况下,查询工作正常,但是在应用范围时,我收到一条消息,指出“模糊列名is_active”。有办法解决这个问题吗?
非常感谢!
解决方法
我通过让 Rails 做聪明的工作解决了这个问题:
在application_record.rb
scope :visible,-> { where is_active: true }
自己解析表名!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。