无法在HTML中实现(显示)删除rails 3.2

时间:2013-02-23 12:43:31

标签: html ruby-on-rails database ruby-on-rails-3

我正在铁轨上用红宝石实现购物车 购物车有两个表,即购物清单和产品。(产品参考购物清单) 在购物清单中,当我点击选项获取产品时,它会显示特定购物清单的产品列表。 还有一个编辑和删除按钮。我已经实现了删除,如果我点击删除数据库中的删除值为数据库中的特定产品变为1(默认为零),但该产品仍然显示在前端(我的是HTML)。

理想情况下,我不希望特定产品显示在前端。请您帮助我。 我的shopping_list控制器如下: -

class ShoppingListsController < ApplicationController
  # GET /shopping_lists
  # GET /shopping_lists.json
  def index
    @shopping_lists = ShoppingList.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @shopping_lists }
    end
  end

  # GET /shopping_lists/1
  # GET /shopping_lists/1.json
  def show
    @shopping_list = ShoppingList.find(params[:id])
    @shopping_list = ShoppingList.includes(:products).find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @shopping_list }
    end
  end

  # GET /shopping_lists/new
  # GET /shopping_lists/new.json
  def new
    @shopping_list = ShoppingList.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @shopping_list }
    end
  end

  # GET /shopping_lists/1/edit
  def edit
    @shopping_list = ShoppingList.find(params[:id])
  end

  # POST /shopping_lists
  # POST /shopping_lists.json
  def create
    @shopping_list = ShoppingList.new(params[:shopping_list])

    respond_to do |format|
      if @shopping_list.save
        format.html { redirect_to @shopping_list, notice: 'Shopping list was successfully created.' }
        format.json { render json: @shopping_list, status: :created, location: @shopping_list }
      else
        format.html { render action: "new" }
        format.json { render json: @shopping_list.errors, status: :unprocessable_entity }
      end
    end
  end

  def list
   @shopping_lists = ShoppingList.find(:all,
                 :order => "id asc")

    respond_to do |format|
      format.html { render :action => 'list' }
      format.json { render :json => @accounts.to_json }
    end       
  end

  # PUT /shopping_lists/1
  # PUT /shopping_lists/1.json
  def update
    @shopping_list = ShoppingList.find(params[:id])

    respond_to do |format|
      if @shopping_list.update_attributes(params[:shopping_list])
        format.html { redirect_to @shopping_list, notice: 'Shopping list was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @shopping_list.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /shopping_lists/1
  # DELETE /shopping_lists/1.json

def delete
    @shopping_list = ShoppingList.find(params[:id])
    @shopping_list.deleted = 1
    @shopping_list.save

    respond_to do |format|
      format.html { redirect_to shopping_lists_url }
      format.json { render :json => { :success => true } }
  # def destroy
  #  @shopping_list = ShoppingList.find(params[:id])
  # @shopping_list.destroy

  #respond_to do |format|
  # format.html { redirect_to shopping_lists_url }
  #format.json { head :no_content }
    end
  end

  def get_product

   @product=Product.where('shopping_list_id = ? ', params[:id])
   # @status=Product.where(status=[[:Open, "open"], [:Close, "close"]])
  # @product_status=Product.where('status = ? ', params[:id])
   # @product=Product.find(params[:shopping_list_id])
   #  @products = Product.includes(:shopping_lists)

  respond_to do |format|
      format.html { render :action => 'get_products' }
      format.json { render json: @shopping_lists }
    end
 end


 def product_edit
    @product = Product.find(params[:id])
  end


  def product_delete
    @product = Product.find(params[:id])
    @product.deleted = 1
    @product.save

    respond_to do |format|
      format.html { redirect_to shopping_list_url }
      format.json { render :json => { :success => true } }
    end
  end 

  def add_product
    @product = Product.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @product }
    end
  end

end

我要显示的Html页面如下: -

<h1>shopping_list</h1>

shopping_list Id: <%= params[:id] %><br>
shopping_list Name: <%= ShoppingList.where('id = ?', params[:id]).pluck(:shopping_list_name)[0] %><br><br/>

  <table border="1">
 <tr><td>Product id.</td><td>Product Name</td><td>category</td><td>quantity</td><td>status</td><td>Product_edit</td><td>Product_delete</td></tr>
<% @product.each do |p| %>
<tr>
<td>Product id: <%= p.id %> <br></td>
<td>Product name: <%= p.product_name %> <br></td>
<td>Product category: <%= p.product_category %> <br></td>
<td>Product Quantity: <%= p.quantity %> <br></td>
<td>Product status: <%= p.status %>
<td><%= link_to 'Edit', {:action => 'product_edit', :id => p.id} %> &nbsp;</td>
<td><%= link_to 'Delete', {:action => 'product_delete', :id => p.id},
    :data => { :confirm => "Are you sure you want to delete this product?" } %></td>
    </tr>
</tr>
<% end %>
</table>
<br/>
<%= link_to 'Back', {:action => 'list'} %><br/>
<%= link_to 'Add New Products', {:action => 'add_product'} %>

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题 - 最好的方法是使用产品型号上的示波器来过滤加载的产品。

default_scope where(deleted: 0)可以完成这项工作,但是default_scopes可能有自己的问题(例如,如果你想有时使用已删除的项目)。