Я выполняю поиск перед вводом данных, чтобы убедиться, что пользователь не дублирует существующую запись, и у меня возникают проблемы с определением того, как фиксировать и использовать количество результатов поиска чтобы направить пользователя на следующий шаг.Нужно распознать, сколько элементов возвращает поиск
Я использую рельсы 3 и pg_search камень
модели/request.rb
class Request < ActiveRecord::Base
attr_accessible :description, :title, :user_id, :who
belongs_to :user
has_many :comments
include PgSearch
pg_search_scope :search, against: [:title, :description, :who],
using: {tsearch: {dictionary: "english"}},
associated_against: {user: :name},
ignoring: :accents
def self.request_search(query)
if query.present?
search(query)
where("title @@ :q or description @@ :q or who @@ :q", q: query)
else
scoped
end
end
end
requests_controller.rb
def index
@requests = Request.request_search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 4, :page => params[:page])
@users = User.all
end
- начать редактирование (в ответ, Джесси)
request_controller.rb (продолжение)
private
def sort_column
Request.column_names.include?(params[:sort]) ? params[:sort] : "title"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end
application_helper.rb
def sortable(column, title = nil)
title ||= column.titleize
css_class = column == sort_column ? "current #{sort_direction}" : nil
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}
end
_requests.html.erb (частичные)
<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>
<div class="row">
<table class="table table-striped pretty">
<thead>
<tr>
<th><%= sortable "title" %></th>
<th><%= sortable "who", "Requested Pro" %></th>
<th><%= sortable "created_at", "When" %></th>
<th><%= sortable "request.user", "Requested by" %></th>
</tr>
</thead>
<tbody>
<% @requests.each do |request| %>
<tr>
<td><%= request.title %></td>
<td><%= request.who %></td>
<td><%= request.created_at %></td>
<td><%= request.user.name %></td>
<td><%= link_to 'Show', request, :class => 'btn btn-mini'%></td>
<% if can? :update, @course %>
<td><%= link_to 'Edit', edit_request_path(request) %></td>
<td><%= link_to 'Destroy', request,
confirm: 'Are you sure?',
method: :delete,
:class => 'btn btn-mini' %></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
<div class="pull-right"><%= will_paginate @requests %></div>
</div>
<%= button_to 'New Request', new_request_path, :class => 'btn btn-large btn-primary mleft20 mtop20' %>
- конец редактировать
Например, существует два способа, чтобы прибыть на страницу индекса с других страниц, после поиска или по ссылке. Если пользователь приходит к индексу после поиска, я хотел бы вставить текст перед результатами поиска в представление, которое гласит: в вашем поиске появились элементы «x». Если вы не видите, что ищете, введите новый запрос, нажав на кнопку.
Иначе, если пользователь просто связан с индексом, я хочу, чтобы у меня был возможность скрыть текст и просто показать индекс как есть.
Я думаю, что могу получить доступ к атрибутам поиска (если это правильно их назвать) через request_search, но я не уверен, как реализовать его в представлении (после нескольких попыток).
Во-вторых, если я могу добавить, я ищу, чтобы скопировать текст для поиска в одно из полей ввода, если пользователь решит создать новую запись ...
Пожалуйста, дайте мне знать, если я заявил вопрос (ы) ясно, и если вы можете пролить некоторый свет для меня. Заранее спасибо.
(Предполагаю, вы используете will_paginate здесь для разбивки на страницы) –
Эй, Джесси. Спасибо за быстрый ответ. Отредактировал вопрос, чтобы включить соответствующие методы сортировки и will_paginate в представлении по вашему предложению. –
Ваш ответ отлично работает, когда пользователь приходит на страницу через поиск (и этого достаточно, чтобы довести меня до конца). Все еще выясняется, что происходит, когда пользователь приходит по ссылке. Прямо сейчас ваше решение возвращает нулевые элементы при достижении по ссылке, потому что нет параметров поиска, т. Е. Никакого поиска. Довольно уверен, что я смогу обработать второй случай, выполнив маршрутизацию на другую целевую страницу и используя те же частичные. Будет опубликован после того, как я смогу это выработать.Еще раз спасибо. –