2016-08-01 7 views
1

Hallo Kollegen Programmierer,Ersetzen Sie Modelldaten, wenn es die gleiche Produkt-ID gibt

Ich stecke in diesem kleinen Problem, das mich in den letzten 2 Tagen abgehört hat. In meinem Projekt gibt es 2 modals, product und special_price. Was ich versuche zu erreichen ist, den Preis für alle verfügbaren Produkte zu ersetzen, wenn ein Eintrag der product_id in der Tabelle special_prices vorhanden ist. Daher ist meine Modell-Datei wie folgt:

product.rb

class Product < ActiveRecord::Base 
    has_many :special_prices, dependent: :destroy 

    before_save :upcase_stock_code 

    validates :name, presence: true, length: { maximum: 50 } 
    validates :stock_code, presence: true, length: { maximum: 20 } 
    validates :status, presence: true, length: { maximum: 10 } 
    validates :default_price, presence: true 
end 

special_price.rb

class SpecialPrice < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :customer 

    validates :product_id, presence: true, uniqueness: { scope: [:customer_id] } 
    validates :customer_id, presence: true 
    validates :price, presence: true 
end 

meine Kunden-Controller als wo die Preise werden in der Show Aktion gezeigt werden soll, wie:

def show 
    @customer = Customer.find(params[:id]) 
    @customer_active = Customer.find_by(id: params[:id], status: "active") 
    @user = User.find_by(params[:user_id]) 
    @special_price = SpecialPrice.find_by(customer_id: params[:id]) 
    @special_prices = SpecialPrice.where(customer_id: params[:id]) 
    @products = Product.all 
end 

in meinen Ansichten

show.html.erb

<div class="tab-pane" id="prices"> 
    <h1>Products</h1> 
    <div> 
     <%= render 'special_prices/price' %> 
    </div> 
</div> 

_price.html.erb

<% @products.each do |k| %> 
    <span> 
    <%= k.id %> 
    <%= k.name %> 

    <% if k.id == @special_price.product_id %> 
     <%= @special_price.price %> 
    <% else %> 
     <%= k.default_price %> 
    <% end %> 
    </span></br> 
<% end %> 

Durch die Codes oben verwenden, bin ich nur in der Lage 1 Produkt bekommen seine special_price zu zeigen. Aber wenn ich einen anderen Eintrag von Sonderpreisen verschiedener products_id hinzufüge, würde sich das Array nicht selbst aktualisieren. Ich habe etwas recherchiert und ich denke, dass es etwas mit lokalen Variable und Instanzvariable zu tun hat, kann mir jemand in die richtige Richtung zeigen? Danke vielmals! Ich würde mich über jede Beratung freuen.

+0

ist es Ihnen gelungen, die 'Product's: special_prices' zu aktualisieren, wenn neue' special_prices' zum bestehenden Produkt hinzugefügt werden? – mrvncaragay

+0

ja. es aktualisiert erfolgreich aber nur 1 Produkt: special_prices, selbst wenn es 2 oder mehr special_prices für diesen Kunden gibt. –

Antwort

0

Hier ist mein Vorschlag: Änderung _price.html.erb

<% @products.each do |k| %> 
    <span> 
    <%= k.id %> 
    <%= k.name %> 

    <!-- show product special_prices --> 
    <% if !k.special_prices.empty? %> 
     <%= k.special_prices.each do |p| %> 
     <span><%= p.price %></span> 
     <% end %> 
    <% else %> 
     <%= k.default_price %> 
    <% end %> 
    </span> 
<% end %> 

seit Produkt has_many :special_prices Sie product.special_prices ein Produkt Sonderpreise durch den Aufruf aufrufen können, und das wird eine Sammlung von Sonderpreisen für dieses bestimmte Produkt zurück.

+0

Thanks !! Das lief gut für mich, ich musste nur die if end-Anweisung rückgängig machen. Nochmals vielen Dank für Ihre Hilfe !! Du hast mir eine Menge Zeit erspart! –

+0

oh yea, gerade realisiert sollte "außer" oder! Sein. froh, dass es dein Problem löst – mrvncaragay