/ / Rails f.select Salva solo le stringhe vuote e non i valori delle opzioni - ruby-on-rails, forms

Rails f.select Salva solo le stringhe vuote e non i valori delle opzioni - ruby-on-rails, forms

Come ottengo questo Rails f.selezionare per interrompere il salvataggio di stringhe vuote nel database? Sto ricevendo 200 "s sia per l'invio dell'API che per l'invio del database, ma il database e l'API stanno entrambi inviando stringhe vuote.

Visualizza codice

<a href="#" class="button" id="new-suggestion-button" onclick="newSuggestionToggle(event)">New Suggestion</a>

<div id="new-suggestion-info">
<h1>New Suggestion</h1>
<%= form_for @suggestion, url: { action: "create" }, remote: true do |f| %>
<div>
<%= f.select :name, options_for_select(@snacks.collect { |snack| snack["name"] if !snack["optional"] }), {}, { id: "snack-select", onchange: "otherSelected()" } %>
</div>

<br>
<div id="other-snack-info">
<h1>New Snack</h1>
<div>
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div>
<%= f.label :purchase_location %>
<%= f.text_field :purchase_location %>
</div>
</div>
<div>
<%= f.hidden_field :optional, value: false %>
<%= f.submit "Submit" %>
</div>
<% end %>
</div>

Codice del controller

def index
api_key = ENV["API_KEY"]
@snacks = Unirest.get("https://address_is_correct" + api_key).body
@snacks << { "name" => "Other" }
@suggestion = Suggestion.new
end

def create
api_key = ENV["API_KEY"]
Unirest.post("https://address_is_correct" + api_key,
headers:{ "Accept" => "application/json" },
parameters: {
name: params[:name],
optional: params[:optional],
purchase_location: params[:purchase_location],
purchase_count: params[:purchase_count],
last_purchase_date: params[:last_purchase_date]
}
).body

@suggestion = Suggestion.new(suggestion_params)

if @suggestion.save
respond_to do |format|
format.html
format.js { render "create" }
end
end
end

private

def suggestion_params
params.require(:suggestion).permit(
:name,
:optional,
:purchase_location,
:purchase_count,
:last_purchase_date
)
end

I parametri che vengono passati nel terminale sembrano così

[["name", ""], ["optional", false], ["purchase_location", ""], ["created_at", 2017-04-19 17:09:46 UTC], ["updated_at", 2017-04-19 17:09:46 UTC]]

risposte:

0 per risposta № 1

Come puoi vedere attraverso il tuo output, il nome selezionato non raggiunge il lato server. Ciò significa che il problema viene elaborato sul front-end.

La mia ipotesi sarebbe quella dato che hai 2 elementiper l'attributo name (1 select, 1 input), il valore selezionato non viene inviato perché l'input viene inserito dopo l'elemento select. Prova a rimuovere l'elemento di input o disabilitarlo selezionando un'opzione.