2012-07-18 4 views
9

Nuovo programmatore ROR qui. Sto cercando di creare un'applicazione Web che consenta a un utente di compilare un modulo, in cui immettere le informazioni di un'azienda e facendo clic su Invia, aggiunge l'input a un database.Ruby on Rails: consente all'utente di inserire una nuova informazione, OPPURE fare clic sul menu a discesa per selezionare le informazioni esistenti

Al momento, se l'utente doveva creare una nuova voce, vedrebbe alcuni campi, ad esempio "Nome azienda". C'è una casella vuota per metterli in una nuova azienda, e accanto a questo c'è un menù a tendina che l'utente può usare per vedere le aziende esistenti nel database.

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

Sto cercando un modo per consentire all'utente di inserire una nuova società oppure fare clic sul menu a discesa e selezionare una società esistente.

Al momento: Se non viene inserito nulla nella casella di testo e nessuna opzione dal menu a discesa selezionato, viene salvata come vuota. Se qualcosa viene inserito e nessuna opzione è selezionata, viene salvata come vuota. Tuttavia, se viene inserito qualcosa e viene selezionato qualcosa dal menu a discesa, l'opzione a discesa viene salvata.

Spero di non averlo reso troppo confuso. Qualsiasi aiuto sarà apprezzato.

Grazie in anticipo.

EDIT:

la mia ora creano l'azione assomiglia a questo fine

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 

e la forma vista:

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

Il nuovo errore è ora:

numero sbagliato di argomenti (1 per 2)

Estratte Fonte: <% = label: COMPANY_NAME%>

Grazie per il vostro aiuto!

+0

cosa vi aspettate se un utente seleziona qualcosa da discesa e anche di tipo qualcosa? – gabrielhilal

+0

Mi aspetto che l'input digitato dall'utente sia prioritario. – Jazz

risposta

4

Non è possibile avere due params con lo stesso nome nella tua vista, come le rotaie non sanno cosa fare con loro

@rodzyn ha ragione, quindi per favore gli dia i crediti ..:)

Giusto per chiarire:

modulo:

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

Il controller:

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

Grazie per il tuo aiuto gabrielhial e @rodzyn. Sareste in grado di guardare la mia modifica alla mia domanda. Grazie ancora! – Jazz

+0

è colpa mia ... mi dispiace .... per favore togli il '[: azienda]' di fronte a '[: new_company_name]' dato che non è legato alla classe Company ... – gabrielhilal

+0

Grazie per avermi sopportato. L'ho fatto, ma ancora ottenere l'errore: metodo non definito 'new_company_name' per la Società: 0xb5424860 e la sorgente estratta è <% = f.text_field: new_company_name%> Saluti di nuovo – Jazz

2

È possibile impostare

<%= text_field :new_company_name %> 

poi nel creare azioni

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