Как создать динамический список выбора, используя Simple Form и Awesome Nested Set в Rails 3.1? - PullRequest
1 голос
/ 10 марта 2012

Может ли кто-нибудь объяснить, как создать динамически генерируемый выпадающий список, который отображает метки имен для веб-посетителя и записывает соответствующий идентификатор в базу данных? Эта концепция кажется настолько простой, что она должна быть очевидной для всех остальных, но я полностью нахожусь в конце, пытаясь найти способ сделать эту работу и / или хороший пример кода для обучения, как это сделать. Какие-нибудь предложения для очень расстроенного новичка?

У меня есть простая модель категорий, использующая Awesome Nested List для отслеживания около 200 категорий. Это поля таблицы:

t.string :name
t.integer :parent_id
t.integer :lft
t.integer :rgt

Это модель category.rb:

class Category < ActiveRecord::Base
  acts_as_nested_set
  attr_accessible :name, :parent_id
end

Это простая форма для представления / category / _form.html.erb

<%= simple_form_for(@category) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :name, :label => 'Category name' %>
    <%= f.select :parent_id, :label => 'Parent category', :value_method => { |r| [r.name, r.id, { :class => r.category.id }]}, :include_blank => true %>
  </div>

  <div class="form-actions">
   <%= f.button :submit %>
  </div>
<% end %>

Это приводит к сообщению об ошибке «SyntaxError in Categories # new»

Extracted source (around line #6):

3: 
4:   <div class="form-inputs">
5:     <%= f.input :name, :label => 'Category name' %>
6:     <%= f.select :parent_id, :label => 'Parent category', :value_method => { |r| [r.name, r.id, { :class => r.category.id }]}, :include_blank => true %>
7:   </div>
8: 
9:   <div class="form-actions">

1 Ответ

3 голосов
/ 10 марта 2012

Вы можете использовать помощник вида awesome_nested_set для построения select:

<%= f.select :parent_id, nested_set_options(Category, @category) {|i| "#{'-' * i.level} #{i.name}" } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...