Я использую Ransack Gem
У меня есть таблица заказов, которая имеет атрибут :status
.
:status
установлен как enum в order.rb
class Order < ApplicationRecord
enum status: [:pending, :paid, :sent, :cancelled, :refunded]
scope :pending, -> { where(status: :pending) }
scope :paid, -> { where(status: :paid) }
scope :sent, -> { where(status: :sent) }
scope :cancelled, -> { where(status: :cancelled) }
scope :refunded, -> { where(status: :refunded) }
def self.ransackable_scopes(auth_object = nil)
[:pending, :paid, :sent, :cancelled, :refunded]
end
end
order_controller.rb
def index
@q = Order.ransack(params[:q])
@orders = @q.result(distinct: true)
end
def search
index
render :index
end
rout.rb
resources :orders, only: [:index, :show] do
collection do
match 'search' => 'orders#search', via: [:get, :post], as: :search
end
end
В моем index.html.erb У меня есть сводная таблица моих заказов
Мне нужны кнопки В ожидании - Платные - Отправленные , что, когда я нажимаю, он отображает заказы по статусу ...
Я пробовал это, и он не фильтруется ...
<%= search_form_for @q, url: search_orders_path, html: {method: :post} do |f| %>
<%= f.hidden_field :pending %>
<%= f.submit "Pending", class: "btn btn-success" %>
<% end %>
<%= search_form_for @q, url: search_orders_path, html: {method: :post} do |f| %>
<%= f.hidden_field :paid %>
<%= f.submit "Paid", class: "btn btn-success" %>
<% end %>
<% @orders.each do |order| %>
<tbody>
<tr>
<td>FR-000<%= order.user.id %></td>
<td><%= order.user.last_name %> </td>
<td><%= order.user.first_name %></td>
<td>#00<%= order.id %></td>
<td><%= order.status %></td>
</tr>
</tbody>
<% end %>