выберите поле, текстовое поле и внешний ключ - PullRequest
2 голосов
/ 21 октября 2010


Я хотел бы знать, каким способом лучше всего решить мой вопрос:
У меня есть форма для выбора людей через поле выбора.Если имя отсутствует в поле выбора, доступно текстовое поле для непосредственного добавления имени человека.
- Форма в new.html.erb является форматом действия new контроллера Team.
- Список людей извлечен из модели People.

def new<br> @team = Team.new<br> @people = People.all<br> end

Я создал атрибут в модели Team для хранения текстового поля new_person:

class Team < ActiveRecord::Base<br> attr_accessor :new_person<br> ...<br> end

Наконец, вот выдержка из моего взгляда:

<%= f.select :person_id, @people.map { |p| [p.name, p.id] } %><br> <%= f.text_field :new_person %>

Очевидно, я хотел бы сохранить нового человека втаблица Person перед сохранением данных из формы.Как обычно, идентификатор сохраняется вместо имен

На данный момент у меня есть две проблемы:
1 / Массив params имеет ключ new_person, который не имеет таблицы.Поэтому невозможно использовать метод Team.new(params[:team]).Существует ли простое решение, чтобы избежать этой проблемы?2 / Как мне нужно person_id, как я могу получить его, когда имя происходит из поля new_person?При использовании метода before_filter?

Большое спасибо,
Camille.

1 Ответ

0 голосов
/ 28 ноября 2011

1) Вы должны рассмотреть использование fields_for в своем представлении в вашем блоке form_for.Это позволит вам указать, что поля в блоке fields_for являются атрибутами другой модели, будут генерировать поля ввода с соответствующими именами и позволят вам использовать params [: team] в вашем контроллере.Подробнее об этом см. В документации FormHelper .

2) Хотя вы можете сделать что-то в своем контроллере, чтобы сначала проверить значение в поле new_person, создайте запись, обновите содержимоеparams [: team] с ценностью вновь созданного человека и создания команды, для меня это похоже на хак.Другое возможное решение, которое может быть менее хрупким, - это использовать JavaScript на странице, который предоставит пользователю модальное диалоговое окно для создания нового человека, отправит нового человека в метод person # create controller, а затем обновит ваше падениевниз.Вероятно, было бы не очень сложно сделать это, используя модальную форму jQuery UI (очень хороший пример по этой ссылке, чтобы делать то, что вам нужно) с удаленной формой Rails и ненавязчивым JavaScript.

Это, вероятно, более сложное решение вашего второго вопроса, чем вы надеетесь, но, вероятно, более полезное в долгосрочной перспективе.

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