2016-11-14 2 views
0

У меня есть модель цветРельсы, как выбрать идентификатор массива?

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

модель продукта

has_many :colorships 
has_many :colors, through: :colorships 

на контроллере продукта я хотел бы от выбора выбрать цвет

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


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

end 
+2

Что вы думаете? –

+0

@EliSadoff выберите идентификатор на массиве – jjplack

+0

Если по «id на массив» вы имеете в виду индекс элемента в массиве, который вы хотите использовать «each_with_index». Если вы хотите найти идентификатор записи, возвращаемой Active Record, вы можете вызвать метод «id» для возвращаемого объекта (записи). – bkunzi01

ответ

0

Проблема заключается в том, что вы используете has_many, которые всегда будет возвращать массив. Вы делаете несколько вещей неправильно.

Не делайте product.color_ids.nil?, потому что он никогда не будет нулем, вы хотите product.colors.empty?, потому что пустой массив не равен нулю, он пуст.

Эта строка current_user.find_by_color_id(product.color_ids.nil? ? nil : product.color_ids.color.id) никогда не будет работать. current_user - это метод Devise для получения объекта current_user, поэтому добавление find к нему приведет к ошибке.

Также product.color_ids.color.id также не будет работать. Я не уверен, что вы здесь делаете, но product.colors и product.color_ids оба возвращают массив. Если вы хотите первый идентификатор, вы можете сделать product.colors.first.id или product.color_ids.first.

Похоже, вы далеко от дома, извините. Я рад помочь больше, но мне нужна дополнительная информация, мне нужна модель пользователя и понимание того, что вы пытались сделать с помощью current_user.find_by_color_id(product.color_ids.nil? ? nil : product.color_ids.color.id).

+0

большое спасибо. вы правы. Я пытаюсь показать продукт, чтобы пользователь получил выбранный цвет продукта. это я пытаюсь сделать. – jjplack

+0

Итак, единственный способ получить идентификатор массива - это просто первый id? – jjplack

+0

Я отредактировал мой вопрос thank's – jjplack

Смежные вопросы