我有上面的代码和以下路线' s SELECT CUST_NUMBER,
REFNUMBER,
'Application No Longer Exists; ' as Exception
from Data
except
select CUST_NUMBER
from applications
:
resources
我是否知道#4和#9中的代码是否可以重构,因为他们正在做同样的事情,而且我已经读过Ruby中的编程总是鼓励DRY代码。在这里学习成为更好的程序员。感谢您的提示和建议。
答案 0 :(得分:1)
正如迪帕克所说,before_action
是一个想法。就个人而言,我更喜欢懒惰的访问者。它的优点是:
order
,则会自动加载product
,而无需手动加载。代码应如下所示:
def new
product
end
def create
if order.save
redirect_to(products_path)
else
render(:new)
end
end
private
def product
@product ||= Product.find(params[:product_id])
end
def order
@order ||= product.orders.build(order_params)
end
请注意,我做了两个小的改动(你可以摆脱它们):
order.save
是否返回真值。new.html.erb
呈现的形式呈现的。如果这些更改不适合您的应用程序,请随意丢弃。
答案 1 :(得分:0)
是的,您可以将其添加到before_action
并从new
和create
操作中删除
现在@product
将在new
和create
操作
before_action :find_product, only: [:new, :create]
private
def find_product
@product = Product.find(params[:product_id])
end