Rails 3. Как добавить пользовательские атрибуты в меню выбора? - PullRequest
0 голосов
/ 13 октября 2011

У меня есть счет.

Счет содержит элементы LineItems (принадлежащие товарам).

В накладной есть раскрывающееся меню для выбора позиций. Мне нужно добавить два пользовательских атрибута: количество данных и цена данных . (HTML5)

Я пытался сделать это, следуя этой статье: http://www.redguava.com.au/2011/03/rails-3-select-list-items-with-custom-attributes/ Но он не работает с вложенными атрибутами модели.

ApplicationHelper

def options_from_collection_for_select_with_attributes(collection, value_method, text_method, attr_name, attr_field, selected = nil)
  options = collection.map do |element|
    [element.send(text_method), element.send(value_method), attr_name => element.send(attr_field)]
  end
  selected, disabled = extract_selected_and_disabled(selected)
  select_deselect = {}
  select_deselect[:selected] = extract_values_from_collection(collection, value_method, selected)
  select_deselect[:disabled] = extract_values_from_collection(collection, value_method, disabled)

  options_for_select(options, select_deselect)
end

_line_item_fields.html.erb

Product: 
<%= f.select(:item_id, options_from_collection_for_select_with_attributes(@items, :id, :name, 'data-quantity', :quantity), {:prompt => 'Select'}, {:class=>'product'}) %>

Я получаю сообщение об ошибке: неопределенный метод "количество" для #Item: 0x007f53380eb2

Скорее всего, метод в помощнике приложения работает хорошо, но проблема в том, что LineItems принадлежат Item. У LineItems есть атрибут количества, но у Элементов нет атрибута количества.

Как вы можете видеть из ошибки, он смотрит на Item, но я действительно должен ссылаться на LineItem.

1 Ответ

0 голосов
/ 13 октября 2011

Нашел ответ здесь: Рубин на рельсах f.Выберите опции с пользовательскими атрибутами

Посмотрите на ответ Дом Анатортуаз

Работыотлично, и нет необходимости добавлять метод в Application Controller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...