如果用户出售了该商品,我正在尝试为用户实现一个按钮"已售出"。在尝试实现这一点时,我想到的是在我的产品表中添加一个新列。如果它被出售,那么我将需要更新数据的属性。如果引用此链接,http://apidock.com/rails/ActiveRecord/Base/update_attributes
这是我应该做的事情吗?我说的对吗?
型号/产品
class Product < ActiveRecord::Base
attr_accessible :sold
end
产品控制器
def sold
@product = Product.find(params[:product_id])
@product.sold = 'true'
save
redirect_to product_path
end
视图/产品/显示
<button type="button" class="btn btn-default"><%= link_to 'Sold', idontknowwhatotputhere %></button>
这也与我不确定的事情有关。我应该在link_to放什么?以及我如何告诉我的申请与我之前所说的出售的def相关?
嗯,这里有几件事。
-
除非您有充分的理由,否则不要在控制器中执行特殊操作。 您所做的只是更新产品。 因此,将路由命名为"更新"。 然后在链接中,只需使用 ssell=true 执行放置请求。 保持休息和传统。
-
完成此操作后,您将需要在控制器中进行验证等。
def update if product && product.update(product_params) redirect_to product_path else redirect_to edit_product_path end end private def product @product ||= Product.find(params[:id]) end def product_params params.require(:product).permit(:sold) end
3.To 应用程序中添加链接进行更新,它将是这样的。
<%= link_to 'Mark as sold', product_path(@product, product: {sold: true} ), method: :put %>
你首先需要声明路由,在 routes.rb 中是这样的:
resources :products do
get :sold, on: :member
end
然后该路由应该生成一个路径帮助程序,如"sold_product",您可以像这样使用它:
<button type="button" class="btn btn-default"><%= link_to 'Sold', sold_product(@product.id) %></button>
您可以使用"耙子路线"检查助手
关于更新属性,您可以使用:
@product.update_attribute(:sold, true)