Ruby on Rails: как использовать локальную переменную в коллекции collection_select - PullRequest
1 голос
/ 20 апреля 2010

Я пытаюсь создать элемент

Поэтому, когда я создаю

_product_row.erb (НЕ РАБОТАЕТ):

My product: <%= product.name %>
<%= collection_select(:product, :category_id, @current_user.categories, :id, :name, options = {:prompt => "-- Select a category --"}) %>

Скриншот:

альтернативный текст http://img534.imageshack.us/img534/8929/screenshot20100421at120.png

Я обнаружил, что смог заставить его работать, объявив переменную экземпляра перед раздачей, но мне кажется, что это огромный взлом.

_product_row.erb (РАБОТАЕТ):

<% @product_select_tmp = product %>
<%= collection_select(:product_select_tmp, :category_id, @current_user.categories, :id, :name, options = {:prompt => "-- Select a category --"}) %>

Скриншот:

альтернативный текст http://img534.imageshack.us/img534/1958/screenshot20100421at120l.png

Поскольку эта часть выполняет итерацию по коллекции продуктов, я не могу просто объявить @product в контроллере (IOW, если я что-то упустил, product должен быть локальной переменной в этой части ).

Так как же заставить collection_select выбрать соответствующий элемент при вызове его с локальной переменной?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

Вы пытались ввести ключ :selected в хэш опций? Если вы предоставите ему текущий product.id, он должен вести себя так, как вы ожидаете.

<%= collection_select(:product, :category_id, @current_user.categories, :id, :name, {:prompt => "-- Select a category --", <strong>:selected => product.category.id</strong>}) %>

1 голос
/ 20 апреля 2010

Вы можете передавать коллекции частям и назначать локальную переменную для передачи их как:

<%= render :partial => "products/product_row", :collection => @products, :as => :products %>

Соответствующая документация: http://apidock.com/rails/ActionView/Partials

...