Rails 将订单标记为完成。这个订单是从一个表格

Rails mark an order order as complete. This order is made from a form

您好,我是 rails 的新手,非常感谢您对此事的帮助。

我正在寻找一种将订单标记为已完成的方法。这方面的一个例子是我有一个管理员可以使用以下代码查看的订单列表。

.row
  .col-md-8
    - for order in @order
      %h2
        = order.user.name
      .orderpanel
        .clientarea
          Client name:
          = order.user.name
          %br
          Client email:
          = order.user.email
          %br
          Client address ... -->:
          %br
          = order.user.address_line_1
          %br
          = order.user.address_line_2
          %br
          = order.user.postcode
          %br
          = order.user.city
          %br
          = order.user.country
        .delivarea
          %br
          delivery_name:
          = order.delivery_name
          %br
          company_name:
          = order.company_name
          %br
          delivery_address1:
          = order.delivery_address1
          %br
          delivery_address2:
          = order.delivery_address2
          %br
          delivery_address3:
          = order.delivery_address3
          %br
          delivery_city:
          = order.delivery_city
          %br
          delivery_postcode:
          = order.delivery_postcode
          %br
          phone:
          = order.phone
          %br
          package_contents:
          = order.package_contents
          %br
          description_content:
          = order.description_content
          %br
          contents_value:
          = order.contents_value
          %br
          cf_reference:
          = order.id
          CR
          %br
          reference_number:
          = order.reference_number
        .tac
          restricted_items:
          = order.restricted_items
          %br
          terms_conditions:
          = order.terms_conditions
          %br
          insurance:
          = order.insurance
          = order.id
  .col-md-4.sidebar
    = paginate @order

是否有某种方法可以通过名称或 ID 选择订单。然后添加一个新的已完成字段,然后迁移到订单。通过单击将该值设置为 true 的按钮。抱歉,我是 rails 的新手,我想知道是否有办法做到这一点。

这是我的订单控制器:

class OrdersController < ApplicationController
  before_filter :authenticate_user!
  def new
    @order = Order.new
  end

  def create
    @order = current_user.orders.new(order_params)
    @order.email = current_user.email
    @order.name = current_user.name
    @order.address_line_1 = current_user.address_line_1
    @order.address_line_2 = current_user.address_line_2
    @order.postcode = current_user.postcode
    @order.city = current_user.city
    @order.country = current_user.country
    if @order.save
      redirect_to dconfirmation_path
    end
  end

  def order_params
    params.require(:order).
      permit(
        :email,
        :delivery_name,
        :company_name,
        :delivery_address1,
        :delivery_address2,
        :delivery_address3,
        :delivery_city,
        :delivery_postcode,
        :delivery_country,
        :phone,
        :package_contents,
        :description_content,
        :restricted_items,
        :terms_conditions,
        :insurance,
        :contents_value,
        :cf_reference,
        :reference_number
        )
  end
  def show
    @user = User.find(params[:id])
  end

  def confirmation
  end

end

感谢您的帮助,我会定期查看此 post。如果有人可以帮助或查看它,我非常感谢您抽出时间。我会提供您需要的更多详细信息。

您可以 运行 迁移以将 :complete 添加到 Order,即

rails g migration add_complete_to_order

然后在生成的迁移文件中:

add_column :orders, :complete, :boolean, default: false

然后在order.rb中可以添加一个方法:

def complete!
  update(complete: true)
end

当您想将订单标记为完成时,您可以随时调用它

您还可以使用 button_to 创建您的按钮。 [http://apidock.com/rails/ActionView/Helpers/UrlHelper/button_to]

<%= button_to "Mark as complete", { action: "complete", id: @order.id } %>

或者您可以使用完整路径代替散列,例如 complete_order_path(@order)(通过 运行ning rake routes.

检查路径

但是您需要在订单控制器中添加新的路线和操作。例如:

resources :orders do
  post "complete", to: "orders#complete", on: :member
end

这应该给你 url 结构 orders/:order_id/complete 然后在你的 OrdersController:

def complete
  order = Order.find(params[:order_id])
  order.complete!
  # handle response
end

但这只是您如何做到这一点的一个例子

如果您有一组订单,则需要遍历每个订单并为每个订单定义一个按钮。例如:

- @orders.each do |order|
 = button_to "#{order.name}: mark as complete", complete_order_path(order)