2016-03-14 3 views
0

У меня есть две модели, клиент и продукт с ассоциациями has_many.options_from_collection_for_select для реляционной модели

Использование options_from_collection_for_select Я хочу показать название продуктов каждого клиента. Я хочу сделать что-то вроде этого ниже

<%= select_tag(:customer_product, options_from_collection_for_select(@customers, @customers.products.id, @customers.products.name))%> 

или

<%= select_tag(:customer_product, options_from_collection_for_select(@customers,:product.id, :product.name))%> 

Я попробовал второй и получил эту ошибку

undefined method `id' for :product:Symbol 

Я хочу о знать, если что-то, как это возможно. Или как можно легко достичь вышеупомянутой функциональности.

ответ

0

Как указано для options_from_collection_for_select, options_from_collection_for_select ожидает collection как 1-го аргумента, value_method и text_method как 2-й и 3-й аргументы, которые будут называться на collection.

Если вы передаете @customers в качестве 1-го аргумента, то вы можете только передать атрибуты Customer как 2-й и 3-й следующим образом:

<%= select_tag(:customer_product, options_from_collection_for_select(@customers, 'id', 'name'))%>

Если вам нужно передать @products то первый вам нужно настроить @products либо через ruby как:

@products = @customers.inject([]).each do |all_products, customer_products| 
    all_products << customer_products 
end.flatten.uniq 

Или, в зависимости от вашей логике, вы могли бы даже м грубая sql сама.

Затем используйте следующие для зрения:

<%= select_tag(:customer_product, options_from_collection_for_select(@products, 'id', 'name'))%> 
Смежные вопросы