2012-07-18 13 views
9

Nowy programator ROR tutaj. Próbuję zbudować aplikację internetową, która umożliwia użytkownikowi wypełnienie formularza, w którym wprowadza się informacje o firmie, a kliknięcie przycisku Wyślij powoduje dodanie danych wejściowych do bazy danych.Ruby on Rails: pozwól użytkownikowi wprowadzić nowe informacje LUB kliknij menu rozwijane, aby wybrać istniejące informacje

W tej chwili, jeśli użytkownik miał utworzyć nowy wpis, zobaczyłby kilka pól, na przykład "Nazwa firmy". Jest tam puste pole do umieszczenia w nowej firmie, a obok jest rozwijane menu, które użytkownik może użyć, aby zobaczyć istniejące firmy w bazie danych.

<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") %> 

szukam sposób, aby umożliwić użytkownikowi wprowadzić nową firmę lub kliknąć na menu rozwijanego i wybierz istniejącą firmę.

W tej chwili: Jeśli nic nie zostanie wprowadzone do pola tekstowego i nie wybrano żadnej opcji, zostanie zapisane jako puste. Jeśli coś zostanie wprowadzone, a żadna opcja nie zostanie wybrana, zostanie zapisane jako puste. Jeśli jednak coś zostanie wprowadzone, a coś zostanie wybrane z menu rozwijanego, opcja rozwijana zostanie zapisana.

Mam nadzieję, że nie zrobiłem tego zbyt zagmatwanego. Każda pomoc w ogóle zostanie doceniona.

Z góry dziękuję.

EDIT:

Moja tworzyć działania teraz wygląda to

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 

koniec

i formularz widok:

<%= 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") %> 

Nowa błąd jest teraz:

zła ilość argumentów (1 do 2)

Extracted Źródło: <% = etykieta: Company_Name%>

dzięki za pomoc!

+0

czego można się spodziewać, jeśli użytkownik wybierze coś z listy rozwijanej, a także wpisać coś? – gabrielhilal

+0

Spodziewałbym się, że dane wejściowe wpisane przez użytkownika będą priorytetem. – Jazz

Odpowiedz

4

nie można mieć dwóch params o tej samej nazwie w widoku, jak szyny nie będzie wiedział, co z nimi zrobić

@rodzyn ma rację, więc proszę dać mu kredyty ..:)

prostu do wyjaśnienia:

swoją postać:

<%= 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") %> 

Kontroler:

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

Dzięki za pomoc gabrielhial i @rodzyn. Czy mógłbyś spojrzeć na moją edycję na moje pytanie? Jeszcze raz dziękuję! – Jazz

+0

to moja wina ... przepraszam ... proszę usunąć '[: firma]' przed '[: nowa_firma_nazwa]' ponieważ nie jest powiązana z klasą Firma ... – gabrielhilal

+0

Dzięki za poświęcenie się ze mną. Zrobiłem to, ale nadal pojawia się błąd: niezdefiniowanej metody 'new_company_name” dla firmy: 0xb5424860 i wyodrębnione źródło jest <% = f.text_field: new_company_name%> Cheers ponownie – Jazz

2

Można ustawić

<%= text_field :new_company_name %> 

następnie w akcji create

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