0

我有这个索引动作:

  def index
    limit = params[:limit]
    page = params[:page]
    sort = params[:sort].split(',')
    @term = nil
    if params[:search]
      @term = params[:search]
      @lessons = policy_scope(Lesson).search(@term)
                                     .order("#{sort[0]} #{sort[1].upcase}")
                                     .paginate(page: page, per_page: limit)
    else
      @lessons = policy_scope(Lesson).order("#{sort[0]} #{sort[1].upcase}")
                                     .paginate(page: page, per_page: limit)
    end
  end

它由带有 vuetify 数据表的 vuejs 前端提供,其目的是发送一组课程对象,由前端过滤和排序。

这适用于默认导轨..

但是,由于涉及到移动 gem,没有字段名称“title”例如或“title_en”,因此订单停止工作。在移动性中,您有一些“假列名”,它会自动处理它以搜索键值表中的值(https://github.com/shioyama/mobility#getting-started

所以我让我坐下来,打开控制台,然后发现:

  1. .order(title: :desc)- 作品
  2. .order(title_en: :asc)- 作品
  3. 涉及字符串的所有内容,例如.order('title DESC').order('title_en ASC')不起作用并导致错误,例如

ActionView::Template::Error (PG::UndefinedColumn: ERROR: column "title_en" does not exist LINE 1: SELECT "lessons".* FROM "lessons" ORDER BY title_en ASC LIMI...

有没有办法让这个工作?也许有什么可以产生title:'title'?还是别的什么魔法?

谢谢!

4

1 回答 1

0

您可以改为这样调用该order方法:

.order(sort[0] => sort[1])

传递"a" => "b"给方法与传递相同"a": "b"

于 2021-02-08T17:23:54.937 回答