【问题标题】:Mark as Sold Ruby rails标记为已售 Ruby 导轨
【发布时间】:2015-04-18 22:07:51
【问题描述】:

如果他/她出售了该商品,我正在尝试为用户实现一个“已售出”按钮。我在尝试实现这一点时想到的是在我的产品表中添加一个新列。如果它被出售,我将需要更新数据的属性。如果参考这个链接,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 sold 相关?

【问题讨论】:

    标签: ruby-on-rails update-attribute


    【解决方案1】:

    好吧,这里有几件事。

    1. 除非有充分的理由,否则不要在控制器中执行特殊操作。您所做的只是更新产品。所以将路线命名为“更新”。然后在链接中,只需使用已售出的 = true 执行放置请求。保持 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.要在您的应用程序中添加链接以更新它将是这样的。

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

    【讨论】:

    • 好吧.. 我知道这听起来很愚蠢。我实际上如何在链接上使用已售出 = true 进行放置请求?你能举个例子吗?很抱歉我的问题,因为我最近才自己学习了 RoR。实际上,通过参考您上面的代码,目前我确实有 products#update,因为它是由脚手架生成的。所以Product有一个单独的编辑页面来更新价格等等。但我希望按钮自动更新,而不必直接转到我之前提到的产品编辑页面。
    【解决方案2】:

    你首先需要声明路由,在 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>
    

    您可以使用“rake routes”检查助手

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

     @product.update_attribute(:sold, true)
    

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      相关资源
      最近更新 更多