我有一个Orders
索引页面,其中包含两个链接,其索引我想根据订单状态进行筛选:
<%= link_to "Current Orders", orders_path(:by_status => "processing") %>
...
<%= link_to "Past Orders", orders_path(:by_status => "completed") %>
我的控制器如下:
class OrdersController < ApplicationController
has_scope :by_status
def index
case params[:status]
when "completed"
@past_orders = Order.where(status: "completed")
when "processing"
@current_orders = Order.where(status: "processing")
end
end
end
我确定def index
是主要问题。但我也无法弄清楚如何在视图页面中显示它。我有:
<% @past_orders.each do |order| %>
我很感激帮助。
答案 0 :(得分:0)
要解决您的问题,您可以根据条件从index.html.erb
拆分渲染在index.html.erb创建条件,如果@post_orders有内容然后渲染past_orders,则渲染current_order
<% if @post_orders %>
<%= render 'past_order.html.erb' %>
<% else %>
<%= render 'current_order.html.erb' %>
<% end %>
然后你创建两个名为_past_order.html.erb的部分文件,并将_current_order.html.erb放在与index.html.erb相同的文件夹中
答案 1 :(得分:0)
如果您希望两个范围的视图看起来相同,那么您应该在控制器上处理它。看起来你正在使用has_scope
gem,所以这应该有效:
class OrdersController < ApplicationController
has_scope :by_status, only: :index
def index
@orders = apply_scopes(Order)
end
end
您需要在Order
模型
class Order < ApplicationRecord
scope :by_status, ->(status) { where status: status }
end
在您的视图 orders/index.html.erb
中,您将以完全相同的方式处理集合,对当前和过去的订单使用@orders
<% @orders.each do |order| %>
如果您需要根据订单状态以不同方式显示视图的组件,只需添加if
语句
<% if order.status == "completed" >
<p>Something<p>
<% else >
<p>Something else<p>
<% end >