/ / Rails f .select Zapisywanie tylko pustych ciągów znaków, a nie wartości opcji - ruby ​​na szynach, formularze

Railsy f.select Zapisywanie tylko pustych łańcuchów, a nie wartości opcji - ruby-on-rails, formularze

Jak zdobyć ten Rails f.wybrać, aby zatrzymać zapisywanie pustych ciągów w bazie danych? Dostaję 200 za przesłanie interfejsu API i przesłanie bazy danych, ale baza danych i interfejs API wysyłają puste ciągi.

Wyświetl kod

<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>

Kod kontrolera

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

Parametry przekazywane przez terminal wyglądają tak

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

Odpowiedzi:

0 dla odpowiedzi № 1

Jak widać na podstawie danych wyjściowych, wybrana nazwa nie dociera do strony serwera. Oznacza to, że problem jest przetwarzany w interfejsie użytkownika.

Sądzę, że skoro masz 2 elementydla atrybutu nazwy (1 wybór, 1 wejście) wybrana wartość nie jest przesyłana, ponieważ dane wejściowe są umieszczane po elemencie select. Spróbuj usunąć element wejściowy lub wyłączyć go przy wyborze opcji.