主动管理重构
Active Admin refactoring
我目前正在 Active Admin 中为我的产品订单(和相关模型)创建一个仪表板。我想在此 table 中显示来自多个模型的数据,结果 table 重复得可怕。我对 Active Admin 不是很在行,希望得到一些关于重构此代码的建议:
#dashboard.rb
section "Your tasks for this week" do
table_for Order.all do
column "Order ID", :id
column "Status" do |order|
order.order_status.name
end
column "Email" do |order|
order.customer_info.email
end
column "Name" do |order|
order.customer_info.name
end
column "Address" do |order|
order.customer_info.address
end
column "City" do |order|
order.customer_info.city
end
column "State/Province" do |order|
order.customer_info.province
end
column "Postal Code" do |order|
order.customer_info.postal
end
column "Country" do |order|
order.customer_info.country
end
column "Bagel" do |order|
order.order_items.each do |oi|
li oi.bagel_type
end
end
column "Topping1" do |order|
order.order_items.each do |oi|
li oi.topping1
end
end
column "Topping2" do |order|
order.order_items.each do |oi|
li oi.topping2
end
end
column "Topping3" do |order|
order.order_items.each do |oi|
li oi.topping3
end
end
column "Open" do |order|
order.order_items.each do |oi|
li oi.open
end
end
end
end
为了向您提供有关我的模型和关联的更多信息,有一个 Order
模型,其中 has_many
order_items
和 has_one
customer_info
。 order_items
和 customer_info
都属于 Order
.
我认为不需要重构 - 您拥有的是可读易懂的代码。
但是,如果您仍然想要,您可以使用一些元编程。
比如这段代码:
column "Email" do |order|
order.customer_info.email
end
column "Name" do |order|
order.customer_info.name
end
column "Address" do |order|
order.customer_info.address
end
column "City" do |order|
order.customer_info.city
end
可以变成这样短:
%w(Email Name Address City).each do |title|
column title do |order|
order.customer_info.send("#{title.downcase}")
end
end
我目前正在 Active Admin 中为我的产品订单(和相关模型)创建一个仪表板。我想在此 table 中显示来自多个模型的数据,结果 table 重复得可怕。我对 Active Admin 不是很在行,希望得到一些关于重构此代码的建议:
#dashboard.rb
section "Your tasks for this week" do
table_for Order.all do
column "Order ID", :id
column "Status" do |order|
order.order_status.name
end
column "Email" do |order|
order.customer_info.email
end
column "Name" do |order|
order.customer_info.name
end
column "Address" do |order|
order.customer_info.address
end
column "City" do |order|
order.customer_info.city
end
column "State/Province" do |order|
order.customer_info.province
end
column "Postal Code" do |order|
order.customer_info.postal
end
column "Country" do |order|
order.customer_info.country
end
column "Bagel" do |order|
order.order_items.each do |oi|
li oi.bagel_type
end
end
column "Topping1" do |order|
order.order_items.each do |oi|
li oi.topping1
end
end
column "Topping2" do |order|
order.order_items.each do |oi|
li oi.topping2
end
end
column "Topping3" do |order|
order.order_items.each do |oi|
li oi.topping3
end
end
column "Open" do |order|
order.order_items.each do |oi|
li oi.open
end
end
end
end
为了向您提供有关我的模型和关联的更多信息,有一个 Order
模型,其中 has_many
order_items
和 has_one
customer_info
。 order_items
和 customer_info
都属于 Order
.
我认为不需要重构 - 您拥有的是可读易懂的代码。 但是,如果您仍然想要,您可以使用一些元编程。
比如这段代码:
column "Email" do |order|
order.customer_info.email
end
column "Name" do |order|
order.customer_info.name
end
column "Address" do |order|
order.customer_info.address
end
column "City" do |order|
order.customer_info.city
end
可以变成这样短:
%w(Email Name Address City).each do |title|
column title do |order|
order.customer_info.send("#{title.downcase}")
end
end