2016-11-15 4 views
1

Ich suche eine ID von einem Array zu bekommen und wenn bekommen sie diese auf die Aktion zeigt hinzufügen Order.newRails erwartet, bekam Array

Farbe (# 70131258622840) erwartet, bekam Array (# 70131401174240)

jemand eine Idee warum?

Produktmodell

has_many :colorships 
has_many :colors, through: :colorships 

Farbmodell

has_many :colorships 
has_many :products, :through => :colorships 

Produktcontroller

def new 
    Product.New 
    @dropdown = @product.colors.collect { |co| [co.name, co.id] } 
end 

def show 
    Product.find(params[:id]) 
    color = product.colors.select { |i| [i.id] } 
end 

def add 
    product = Product.find(params[:id]) 
    if product 
    color = product.colors.select { |i| [i.id] } 
    if order.nil? # create new order 
     order = Order.new 
     order.product = product 
     order.color = color   
    end 
    end 
end 
+0

zeigt die gesamte Backtrace hilft anderen zu sehen, wo das Problem besteht, so ermutige ich, den genauen Fehler zu zeigen, die Sie bekommen. – uday

Antwort

3
color = product.colors.select { |i| [i.id] } 

Diese Zeile gibt Ihnen eine Reihe von Farben, keine Farbe. Dies wäre natürlich

color = product.colors.select { |i| i.id } 

aber select gibt Ihnen einen Array als gut, auch ein Element in diesem Fall. find gibt Ihnen nur das Element, das Sie oder nil wollen stattdessen

color = product.colors.find { |i| i.id } 
+0

das ist es. Vielen Dank @ursus – jjplack

0

Wie Sie sagten, Sie Array von IDs müssen. Sie können auch durch product.colors.ids erhalten.

Dies wird Array von IDs der Farbe zurückgeben.

Verwandte Themen