Rails控制器中的索引操作问题

abh*_*hir 0 ruby controller ruby-on-rails

可能是一个愚蠢的问题,所以我提前为此道歉:

我有一个Item Controller索引动作我用来显示所有items(duh).现在,我想过滤显示的项目(这里只是标题中有"鞋子"的项目).

不幸的是,我无法在索引操作下定义@item = Item.find(params [:id])语句.

我在ItemsController #index中得到了可怕的ActiveRecord :: RecordNotFound ----找不到没有ID错误的Item.

有任何想法吗?

物品控制器

def index
     @item = Item.find(params[:id])
     @items = Item.where(@item.title =~ /shoes/i).paginate(:page => params[:page], :per_page => 30)

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @items }
    end
  end
Run Code Online (Sandbox Code Playgroud)

Ism*_*reu 5

这实际上就是你想要的.你尝试过什么都没有意义.

  def index
     @items = Item.where("title ILIKE '%shoes%'").paginate(:page => params[:page], :per_page => 30)

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @items }
    end
  end
Run Code Online (Sandbox Code Playgroud)

编辑:

在某种方式与所有受支持的数据库兼容,似乎你可以做这样的事情

item=Item.arel_table
Item.where(item[:title].matches('%shoes%'))
Run Code Online (Sandbox Code Playgroud)

  • @abhir:大多数数据库都支持这种或那种形式的真正正则表达式,但是,唉,它们都以不同的方式做到了.而且你可能想看一下PostgreSQL文档的当前版本,7.3很长一段时间:http://www.postgresql.org/docs/current/static/functions-matching.html (2认同)