2016-07-01 3 views
0

Я хочу удалить соответствующую строку полностью, если tquantity = 0.Удалите соответствующую строку полностью, если acutal количество идет к нулю

Найдите скриншот для лучшего понимания, как показано ниже;

screenshot.png

index.html.erb

<div class="col-md-10 col-md-offset-1"> 

     <div class="table-responsive myTable"> 

      <table class="table listing text-center"> 
       <tr class="tr-head"> 
        <td>DESCRIPTION</td> 
        <td>COLOR</td> 
        <td>QUANTITY</td> 
        <td>RETAIL PRICE</td> 
        <td>TOTAL AMOUNT</td> 
        <td>CARTON NO</td> 
        <td>CUSTOMER 1</td> 
        <td>CUSTOMER 2</td> 
        <td>ACTUAL QUANTITY</td> 
       </tr> 

       <% @purchases.each do |purchase| %> 

       <tr class="tr-<%= cycle('odd', 'even') %>"> 

        <td class="col-2"><%= purchase.description %></td> 
        <td class="col-1"><%= purchase.color %></td> 
        <td class="col-2"><%= purchase.quantity %></td> 
        <td class="col-2"><%= number_with_precision(purchase.rprice, :delimiter => ",", :precision => 2) %></td>   
        <td class="col-2"><%= number_with_precision(purchase.tamount, :delimiter => ",", :precision => 2) %></td> 
        <td class="col-2"><%= purchase.cartonno %></td> 
        <td class="col-2"><%= purchase.cus1 %></td> 
        <td class="col-2"><%= purchase.cus2 %></td> 
        <td class="col-2"><%= tquantity = purchase.quantity - purchase.cus1 - purchase.cus2 %></td> 

       </tr> 

       <% end %> 

      </table> 

     </div> 
    </div> 
</div> 

purchases_controller.rb

class PurchasesController < ApplicationController 
     before_action :set_purchase, only: [:show, :edit, :update, :destroy] 

    # GET /Stockings 
    # GET /deldetails.json 
    def index 
    #@purchases = Purchase.all 
    @purchases = Purchase.where("tquantity !=?", 0) 
    end 

    def import 
    Purchase.import(params[:file]) 
    redirect_to purchases_url, notice: "Purchases imported." 
    end 

    # GET /purchases/1 
    # GET /purchases/1.json 
    def show 
    end 

    # GET /purchases/new 
    def new 
    @purchase = Purchase.new 
    end 

    # GET /purchases/1/edit 
    def edit 
    end 

    # POST /purchases 
    # POST /purchases.json 
    def create 
    @purchase = Purchase.new(purchase_params) 

    respond_to do |format| 
     if @purchase.save 
     format.html { redirect_to @purchase, notice: 'Purchase was successfully created.' } 
     format.json { render :show, status: :created, location: @purchase } 
     else 
     format.html { render :new } 
     format.json { render json: @purchase.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /purchases/1 
    # PATCH/PUT /purchases/1.json 
    def update 
    respond_to do |format| 
     if @purchase.update(purchase_params) 
     format.html { redirect_to @purchase, notice: 'Purchase was successfully updated.' } 
     format.json { render :show, status: :ok, location: @purchase } 
     else 
     format.html { render :edit } 
     format.json { render json: @purchase.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /purchases/1 
    # DELETE /purchases/1.json 
    def destroy 
    @purchase.destroy 
    respond_to do |format| 
     format.html { redirect_to purchases_url, notice: 'Purchase was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_purchase 
     @purchase = Purchase.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def purchase_params 
     params.require(:purchase).permit(:season, :category, :articleno, :description, :color, :quantity, :rprice, :tamount, :cartonno, :cus1, :cus2, :tquantity) 
    end 
end 

purchase.rb

class Purchase < ActiveRecord::Base 

    def self.import(file) 
     CSV.foreach(file.path, headers: true) do |row| 
      Purchase.create! row.to_hash 
     end 
    end 
end 

мне нужно использовать SQL ИНЕКЕ ли,Если да, то как бы получить желаемый результат?

+0

Когда вы говорите, что хотите «удалить соответствующую строку полностью, если tquantity = 0», означает ли это удаление строки из базы данных или только из представления, которое вы показали на скриншоте? –

+0

Спасибо за ответ. Я хочу знать оба аспекта. –

+0

Любое неправильное использование этой конкретной кодировки, которая является <% = tquantity = purchase.quantity - purchase.cus1 - purchase.cus2%>, как Purchase.first.tquantity в rails console show nil значения для всех покупок. –

ответ

0

В вашем действии update вы хотите проверить, соответствуют ли новые значения покупке критериям соответствия, которые вы установили. Используйте эти изменения в update действия, чтобы это произошло:

# PATCH/PUT /purchases/1 
# PATCH/PUT /purchases/1.json 
def update 
    respond_to do |format| 
    updated = @purchase.update(purchase_params) 
    deleted = (@purchase.quantity - @purchase.cus1 - @purchase.cus2) <= 0 
    if deleted 
     @purchase.destroy 
     format.html { redirect_to purchases_url, notice: 'Purchase was deleted.' } 
     format.json { head :no_content } 
    elsif updated 
     format.html { redirect_to @purchase, notice: 'Purchase was successfully updated.' } 
     format.json { render :show, status: :ok, location: @purchase } 
    else 
     format.html { render :edit } 
     format.json { render json: @purchase.errors, status: :unprocessable_entity } 
    end 
    end 
end 

Что касается точки зрения, в случае, если случится быть любые строки, которые должны быть отфильтрованы в данных, вы можете использовать этот запрос:

# GET /Stockings 
# GET /deldetails.json 
def index 
    @purchases = Purchase.where("quantity - cus1 - cus2 > 0") # Only records with a valid total quantity 
end 

Для импорта CSV значения могут быть отфильтрованы до создания объекта модели покупки. Попробуйте изменить, чтобы использовать эту функцию:

def self.import(file) 
    CSV.foreach(file.path, headers: true) do |row| 
    if (row["quantity"].to_i - row["cus1"].to_i - row["cus2"].to_i) > 0 
     Purchase.create! row.to_hash 
    end 
    end 
end 

Это позволит устранить недопустимые (нулевое количество) объекты модели Покупки от создаются в приложении в процессе импорта CSV. Это предполагает, что поля заголовка называются «количество», «cus1» и «cus2», и, возможно, их нужно немного скорректировать, чтобы соответствовать фактическим именам полей заголовка.

+0

Отлично! Прямо сейчас, когда я импортирую файл csv, он дает мне значения больше нуля, скрывая нулевые значения, но если я хочу полностью удалить эти нулевые значения, как это сделать? –

+0

Все зависит от того, как вы импортируете CSV, я полагаю. Действие «update» удалит их, но если у вас есть отдельный импорт CSV, вам придется либо предварительно фильтровать записи нулевого значения, либо уничтожать их после импорта. Предварительная фильтрация будет намного быстрее и может существенно повлиять на производительность, если у вас много записей и значительное количество записей, которые нужно удалить.Если вы включите детали своего импорта CSV в свой вопрос, я увижу, могу ли я включить фильтрацию в свой ответ. –

+0

Спасибо, господин, я обновил свой вопрос с помощью файла purchase.rb. –

-1

У меня была аналогичная проблема, и я работал вокруг нее, используя destroy_all, а не destroy. Это очистило строку от показа для меня. Дайте мне знать, если это поможет.

+0

Спасибо за ответ. Проблема заключается в том, что при запуске кода, который является @purchases = Purchase.where («tquantity! =?», 0) в контроллере/индексе он ничего не отображает на экране. –