标记为已售出的Ruby导轨

时间:2015-04-18 22:07:52

标签: ruby-on-rails update-attribute

我正在尝试为用户实施一个“已售出”按钮,如果他/她卖掉了该商品。在尝试实现这一点时,我想到的是在我的产品表中添加一个新列。如果它被出售,我将需要更新数据的属性。如果引用此链接,请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上放什么?以及我如何告诉我的申请与我之前说过的售卖有关?

2 个答案:

答案 0 :(得分:1)

嗯,这里有几件事。

  1. 除非您有充分的理由,否则请勿在控制器中执行特殊操作。您所做的只是更新产品。因此,请指明路线&#39;更新&#39;。然后在链接中只使用sold = true执行put请求。保持RESTful和传统。

  2. 执行此操作后,您需要在控制器中进行验证等。

    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. 3.要在应用程序中添加链接以进行更新,它将是这样的。

    <%= link_to 'Mark as sold', product_path(@product, product: {sold: true} ), method: :put %>
    

答案 1 :(得分:0)

首先需要声明路由,例如routes.rb:

resources :products do

  get :sold, on: :member

end
然后该路由应该生成一个路径助手,例如&#39; sold_product&#39;你可以像以下一样使用它:

 <button type="button" class="btn btn-default"><%= link_to 'Sold', sold_product(@product.id) %></button>

您可以使用&#39; rake路线&#39;

查看帮助者

关于更新属性,您可以使用:

 @product.update_attribute(:sold, true)