这就是我要做的事情:
创建订单时,单击查看链接,然后重定向到包含发票的显示页面。我正在使用以下代码来循环发票中的值。但它没有正常工作,所有发票都显示出来,而不仅仅是选定的发票。
我已经尝试删除<% @orders.each do |order| %>
,但没有任何运气。
我在这里缺少什么?有什么想法吗?
<% @orders.each do |order| %>
<% order.line_items.each do |line_item| %>
Order #<%= line_item.order_id %>
<%= order.first_name %> <%= order.last_name %>
<%= line_item.product.title %>
<%= number_to_currency line_item.product.price %>
<%= line_item.quantity %>
<%= number_to_currency line_item.total_price %>
<% end %>
<% end %>
更新1
route.rb:resources :orders, only: [:index, :new, :create, :show]
我没有发票控制器,一切都通过订单控制器。
def show
@orders = Order.all
end
def new
@cart = current_cart
if @cart.line_items.empty?
redirect_to root_url, notice: "Your cart is empty"
return
end
@order = Order.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @order }
end
end
def create
@order = Order.new(order_params)
@order.add_line_items_from_cart(current_cart)
@order.user_id = current_user.id
if @order.save
if @order.process
redirect_to root_path, notice: "Successfully charged."
and
return
end
end
render 'new'
end
答案 0 :(得分:1)
将控制器中的方法更改为
def show
@order = Order.find(params[:id])
end
并在视图中删除
<% @orders.each do |order| %>
并通过
调用订单属性<% @order.line_items.each do |line_item| %>
Order #<%= line_item.order_id %>
<%= @order.first_name %> <%= @order.last_name %>
<%= line_item.product.title %>
<%= number_to_currency line_item.product.price %>
<%= line_item.quantity %>
<%= number_to_currency line_item.total_price %>
<% end %>
您显示了所有订单,而您只需要显示最近创建的订单。
答案 1 :(得分:0)
@Theopap
目前的问题是show方法,该方法返回Order数据库中找到的所有订单,重构show方法以查找特定id的订单,因此show方法应如下所示:
当前节目应成为索引操作
def index
@orders = Order.all
end
这将从路线获取订单ID,所以
def show
@order = Order.find(params[:id])
end
路线
这样的事情应该用你的路线完成,以便你的参数[id]。
get ‘\order\:id’, to:‘order#show’
最好还是使用下面的选项来生成7个默认的rails actions.e.g。索引,显示,创建等
resources orders
(http://guides.rubyonrails.org/v2.3/routing.html)
答案 2 :(得分:0)
Show方法需要看起来像这样
def show
@order = Order.find(params[:id])
end
确保路线中包含id,它应该如下所示&#34;:id&#34;是一个数字(最有可能)
/orders/:id
如果路线上的鼻涕看起来像是改变了链接中的路线, 可能像 params [:id] 这样的位从路径中抓取那个id,这就是它找到特定顺序的方式。
在您的视图中,您不需要执行每个循环。您将能够使用您创建的@order变量,因此您的视图将如下所示
<%= @order.first_name %> <%= @order.last_name %>
答案 3 :(得分:-4)
你能否展示你的节目方法,问题很可能就在那里。同时使用ruby on rails debugger,以确保@orders包含所下订单的发票信息。
试试这个:&lt;%= debug @orders%&gt;