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)
您好,我是 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)