Ruby on Rails: разрешить пользователю вводить новую информацию ИЛИ щелкнуть раскрывающееся меню, чтобы выбрать существующую информацию.

Новый программатор ROR здесь. Я пытаюсь создать веб-приложение, которое позволяет пользователю заполнять форму, в которой он вводит информацию о компании, и, нажимая кнопку «Отправить», добавляет ввод в базу данных.

На данный момент, если пользователь должен создать новую запись, он увидит несколько полей, например, «Название компании». Для них есть пустое поле для ввода новой компании, а рядом с ним есть раскрывающееся меню, которое пользователь может использовать для просмотра существующих компаний в базе данных.

<div class="field">
<%= f.label :company_name %><br />
<%= f.text_field :company_name %>

<%= f.label :company_name %><br />
<%= f.select( :company_name, Company.all.map {|p| [p.company_name]}.uniq!, :prompt => "Select a Company") %>

I'm looking for a way to allow the user to enter a new company, OR click on the drop down menu and select an existing company.

На данный момент: если в текстовое поле ничего не введено и ни один параметр из раскрывающегося списка не выбран, оно сохраняется как пустое. Если что-то введено и ни один параметр не выбран, он сохраняется как пустой. Однако, если что-то введено и что-то выбрано из раскрывающегося списка, параметр раскрывающегося списка сохраняется.

Надеюсь, я не сделал это слишком запутанным. Любая помощь вообще будет оценена.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Мое действие создания теперь выглядит так

 def create
@company = Company.new(params[:company])
@company.company_name = params[:new_company_name] unless params[:new_company_name].empty?

respond_to do |format|
  if @company.save
    format.html { redirect_to @company, notice: 'Company was successfully created.' }
    format.json { render json: @company, status: :created, location: @company }
  else
    format.html { render action: "new" }
    format.json { render json: @company.errors, status: :unprocessable_entity }
  end
end

конец

и вид формы:

<%= label :company_name %><br />
<%= text_field :new_company_name %>

<%= f.label :company_name %><br />
<%= f.select( :company_name, Company.all.map {|p| [p.company_name]}.uniq!, :prompt => "Select a Company") %>

Теперь новая ошибка:

неправильное количество аргументов (1 из 2)

Извлеченный источник: ‹%= label :company_name %>

Спасибо за вашу помощь!


person Jazz    schedule 18.07.2012    source источник
comment
что вы ожидаете, если пользователь выберет что-то из выпадающего списка и также что-то наберет?   -  person gabrielhilal    schedule 18.07.2012
comment
Я ожидаю, что ввод, введенный пользователем, будет приоритетным.   -  person Jazz    schedule 18.07.2012


Ответы (2)


У вас не может быть двух параметров с одинаковыми именами в вашем представлении, так как рельсы не будут знать, что с ними делать.

@rodzyn прав, поэтому, пожалуйста, отдайте ему должное .. :)

Просто для уточнения:

ваша форма:

<%= label_tag :new_company_name, "Company name" %><br />
<%= text_field_tag :new_company_name %>

<%= f.label :company_name %><br />
<%= f.select( :company_name, Company.all.map {|p| [p.company_name]}.uniq!, :prompt => "Select a Company") %>

Ваш контроллер:

@company = Company.new(params[:company])
@company.company_name = params[:new_company_name] unless params[:new_company_name].empty?
person gabrielhilal    schedule 18.07.2012
comment
Спасибо за вашу помощь gabrielhial и @rodzyn. Не могли бы вы посмотреть на мое редактирование моего вопроса. Спасибо еще раз! - person Jazz; 18.07.2012
comment
это моя вина... извините.... пожалуйста, удалите [:company] перед [:new_company_name], так как это не относится к классу Company... - person gabrielhilal; 18.07.2012
comment
Спасибо, что терпишь меня. Я сделал это, но все еще получаю сообщение об ошибке: неопределенный метод `new_company_name' для компании: 0xb5424860, а извлеченный источник - ‹%= f.text_field :new_company_name %> Снова ура - person Jazz; 18.07.2012
comment
Я думаю, что проблема в f.text_field, где f является помощником для модели... переделайте f и все будет хорошо... - person gabrielhilal; 18.07.2012
comment
обновите свой новый код после EDIT... text_field и label, связанные с: new_company_name, не должны иметь f. перед ними... Я также обновил свой ответ... - person gabrielhilal; 18.07.2012
comment
мы почти закончили... теперь замените <%= label :company_name %> на <%= label_tag :new_company_name, "Company name" %> или просто удалите его... также text_field_tag вместо text_field. - person gabrielhilal; 18.07.2012
comment
Вот и все! Большое спасибо! Могу я просто дать вам кредиты :) - person Jazz; 18.07.2012

Вы можете установить

<%= text_field :new_company_name %>

затем при создании действия

@company = Company.new(params[:company])
@company.company_name = params[:new_company_name] unless params[:new_company_name].empty?
person Marcin Olichwirowicz    schedule 18.07.2012