Может Collection_Select быть использованы для создания Одинаковое раскрывающегося списка из базовой модели для нескольких переменных в той же форме? - PullRequest
1 голос
/ 20 августа 2011

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

class CreateProjects < ActiveRecord::Migration
  def self.up
    create_table :projects do |t|
      t.references :oem1
      t.references :oem2
      t.references :oem3

      t.timestamps
    end
  end

  def self.down
    drop_table :projects
  end
end

Для этой программы необходимо:

  1. Разрешить пользователю назначать значения oem1, oem2 и oem3 из каплисписок производителей.
  2. Разрешить администратору или опытному пользователю добавлять или удалять значения в списке, из которого будут выбирать пользователи.

Вторая цель легко достигается созданием такой модели, какпоказано в этом файле миграции:

class CreateOems < ActiveRecord::Migration
  def self.up
    create_table :oems do |t|
      t.string :name

      t.timestamps
    end
  end

  def self.down
    drop_table :projects
  end
end

Если бы у меня не было трех уникальных переменных OEM в модели PROJECTs, я бы просто сделал PROJECT: own_to oems и OEM: has_many projects и просто используйте collection_select , чтобы выбрать имя OEM-производителя из модели OEM-производителей и присвоить его эталонной переменной OEM-модели в модели PROJECTs.Однако у меня есть три OEM-переменные, и все они не могут быть названы OEM.Итак, насколько я знаю, я не могу связать все эти три переменные с переменной OEM.name в раскрывающемся списке collection_select.

Итак, что мне делать?Есть ли другой способ достичь этих двух целей?

Ответы [ 2 ]

1 голос
/ 21 августа 2011

В вашей форме вы можете сделать следующее:

<%= form_for @project do |f| %>
  <p>
    <%= f.label :oem1 %>
    <%= f.collection_select :oem1, Oem.all, :name, :name %>
  </p>
  <p>
    <%= f.label :oem2 %>
    <%= f.collection_select :oem2, Oem.all, :name, :name %>
  </p>
  <p>
    <%= f.label :oem3 %>
    <%= f.collection_select :oem3, Oem.all, :name, :name %>
  </p>

  <!-- The rest of your form... -->
<% end -%>

Не уверен насчет ваших требований, но похоже, что отношения между проектами и проектами многие-многие Итак, как насчет использования has_and_belongs_to_many?

1 голос
/ 21 августа 2011

Думаю, я вас неправильно понимаю, но вы говорите, что это не сработает?

- oems = Oem.all

= collection_select(:project, :oem1, oems, :id, :name, :prompt => true)
...
= collection_select(:project, :oem2, oems, :id, :name, :prompt => true)
...
= collection_select(:project, :oem3, oems, :id, :name, :prompt => true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...