循环通过值代码

时间:2017-03-30 12:07:58

标签: ruby-on-rails ruby ruby-on-rails-4

这就是我要做的事情: 创建订单时,单击查看链接,然后重定向到包含发票的显示页面。我正在使用以下代码来循环发票中的值。但它没有正常工作,所有发票都显示出来,而不仅仅是选定的发票。 我已经尝试删除<% @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

4 个答案:

答案 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 ordershttp://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;