/ / Rails f.select Enregistrement de chaînes vierges et non de valeurs d’option - ruby-on-rails, formulaires

Rails f.select Sauvegarde uniquement des chaînes vierges et non des valeurs d'option - ruby-on-rails, forms

Comment puis-je obtenir ce Rails f.sélectionnez pour arrêter l'enregistrement des chaînes vides dans la base de données? Je reçois 200 "pour la soumission d'API et la soumission de base de données, mais la base de données et l'API envoient toutes deux des chaînes vides.

Voir le code

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

Code du contrôleur

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

Les paramètres transmis dans le terminal ressemblent à ceci

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

Réponses:

0 pour la réponse № 1

Comme vous pouvez le voir à travers votre sortie, le nom sélectionné n’atteint pas le côté serveur. Cela signifie que le problème est traité en amont.

Je suppose que puisque vous avez 2 élémentspour l'attribut name (1 select, 1 input), la valeur sélectionnée n'est pas soumise car l'entrée est placée après l'élément select. Essayez de supprimer l’élément d’entrée ou de le désactiver lorsque vous sélectionnez l’option.