Ruby on rails 限制文本字段的ransack输出

Ruby on rails 限制文本字段的ransack输出,ruby-on-rails,ransack,Ruby On Rails,Ransack,我已经开始使用ransack gem来过滤我的数据库。但我不知道如何定义textfield,它将定义应该显示多少行,例如,我将在textfield中输入5,而我的输出将只显示数据库中的最后5个结果 控制器: def index @q = Roulette.search(params[:q]) @numbers = @q.result end 查看: <%= search_form_for @q do |f| %> <di

我已经开始使用ransack gem来过滤我的数据库。但我不知道如何定义textfield,它将定义应该显示多少行,例如,我将在textfield中输入5,而我的输出将只显示数据库中的最后5个结果

控制器:

def index
    @q             = Roulette.search(params[:q])
    @numbers       = @q.result
end
查看:

<%= search_form_for @q do |f| %>
  <div class="field">
    <%= f.label :table_id_eq, "Table" %>
    <%= f.select :table_id_eq, options_from_collection_for_select(Table.all, :id, :title, @q.table_id_eq), include_blank: true %>
  </div>

  <div class="field">
    <%= f.label :woman_id_eq, "Woman" %>      
    <%= f.select :woman_id_eq, options_from_collection_for_select(Woman.all, :id, :name, @q.woman_id_eq), include_blank: true %>
  </div>

  <div class="actions"><%= f.submit "Search" %></div>
<% end %>

<div id="numbers">
  <% @numbers.each do |no| %>
    <h4> <%= no.number %>,</h4>
  <% end %>
</div>

,
您可以使用来限制控制器中返回的结果数

 def index
     @q             = Roulette.search(params[:q]).limit(5)
     @numbers       = @q.result
 end
因此,您可以在params散列中将textfield中的值传递给控制器,供
limit
使用。例如:

 @q = Roulette.search(params[:q]).limit(params[:no_of_results)

但我不知道如何将值传递给控制器。如果我添加到视图:我将得到错误:未定义的方法“:no_of_results”,您需要将
:no_of_results
添加到您的模型中。可以将属性添加到模型中。不过,您可能想使用。我终于找到了如何将参数传递给控制器。我不得不通过:ransacker:no_of_results do | r | end虚拟属性创建空方法,因为ransack可能会将搜索参数转换为查询。