Voici un morceau de code que j'utilise maintenant:
<%= f.select :project_id, @project_select %>
Comment le modifier pour que sa valeur par défaut soit égale à params[:pid]
lorsque la page est chargée?
Voici un morceau de code que j'utilise maintenant:
<%= f.select :project_id, @project_select %>
Comment le modifier pour que sa valeur par défaut soit égale à params[:pid]
lorsque la page est chargée?
Réponses:
Cela devrait le faire:
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
options_for_select
c'est mieux. C'est bon pour n'importe quelle situation, bon pour l'édition de formulaire aussi.
Utilisez le bon attribut de l'instance actuelle (par exemple @work.project_id
):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
select_tag
aussi. Merci, cela m'a vraiment aidé aussi.
options_for_select(..., f.object.project_id )
Rails 3.0.9
select options_for_select([value1, value2, value3], default)
value3], default
Le problème avec toutes ces réponses est qu'elles définissent le champ sur la valeur par défaut même si vous essayez de modifier votre enregistrement.
Vous devez définir la valeur par défaut sur votre valeur existante, puis la définir uniquement sur la valeur par défaut réelle si vous n'avez pas de valeur. Ainsi:
f.select :field, options_for_select(value_array, f.object.field || default_value)
Pour ceux qui ne sont pas familiers avec f.object.field
vous, utilisez toujours f.object
puis ajoutez votre nom de champ à la fin de celui-ci.
select2
plugin JS. Fonctionne parfaitement si vous créez ou modifiez des enregistrements avec le même formulaire et utilisez select2, en particulier avec du texte d'espace réservé.
Essaye ça:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
params[:pid]
n'a pas fonctionné, mais votre exemple a fonctionné.
si params [: pid] est une chaîne, qui si elle provient d'un formulaire, c'est le cas, vous devrez probablement utiliser
params[:pid].to_i
pour l'élément correct à sélectionner dans la liste de sélection
@project
variable avec un identifiant de la table de base de données, au lieu d'un titre, ce code a fonctionné ajouté au dos de l' form.select
aide: selected: @project
Merci @danengle
J'ai trouvé une solution et j'ai trouvé que je suis assez inexpérimenté en RoR.
À l'intérieur du contrôleur qui gère la vue décrite ci-dessus, ajoutez ceci:
@work.project_id = params[:pid] unless params[:pid].nil?
Je n'ai pas pu faire fonctionner cela et j'ai trouvé que je devais ajouter l'attribut html "sélectionné" non seulement à la <option>
balise correcte mais aussi à la <select>
balise. Les documents de MDN sur l'attribut sélectionné de la balise de sélection disent:
selected - L'attribut booléen indique qu'une option spécifique peut être initialement sélectionnée.
Cela signifie que le code devrait ressembler à:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
Vous pouvez également définir l'attribut: project_id dans le contrôleur, car le premier argument de f.select extrait cet attribut particulier.
Si vous essayez d'imprimer l'objet f, vous verrez qu'il y a f.object qui peut être sondé pour obtenir l'élément sélectionné (applicable pour tous les rails version> 2.3)
logger.warn("f #{f.object.inspect}")
donc, utilisez le script suivant pour obtenir la bonne option sélectionnée:
:selected => f.object.your_field
C'est déjà expliqué, va essayer de donner un exemple
que la liste de sélection soit
select_list = { eligible: 1, ineligible: 0 }
Ainsi, le code suivant entraîne
<%= f.select :to_vote, select_list %>
<select name="to_vote" id="to_vote">
<option value="1">eligible</option>
<option value="0">ineligible</option>
</select>
Donc, pour faire une option sélectionnée par défaut, nous devons utiliser selected: value .
<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>
si can_vote? renvoie vrai, il définit sélectionné: 1 puis la première valeur sera sélectionnée, sinon la seconde.
select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible">
<option value="1">eligible</option>
<option selected="selected" value="0">ineligible</option>
</select>
si les options de sélection ne sont qu'une liste de tableaux au lieu de hast, la sélection sera juste la valeur à sélectionner, par exemple si
select_list = [ 'eligible', 'ineligible' ]
maintenant le sélectionné prendra juste
<%= f.select :to_vote, select_list, selected: 'ineligible' %>
La réponse de Mike Bethany ci-dessus a fonctionné pour définir une valeur par défaut lorsqu'un nouvel enregistrement était en cours de création et conserver la valeur que l'utilisateur a sélectionnée dans le formulaire d'édition. Cependant, j'ai ajouté une validation de modèle et cela ne m'a pas permis de soumettre le formulaire. Voici ce qui a fonctionné pour moi d'avoir une validation de modèle sur le terrain et d'afficher une valeur par défaut ainsi que la valeur sélectionnée par l'utilisateur en mode édition.
<div class="field">
<%= f.label :project_id, 'my project id', class: "control-label" %><br>
<% if @work.new_record? %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], true), {}, required: true, class: "form-control" %><br>
<% else %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], @work.project_id), {}, required: true, class: "form-control" %><br>
<% end %>
</div>
Validation du modèle
validates :project_id, presence: true
Cela devrait fonctionner pour vous. Il passe simplement {:value => params[:pid] }
à la variable html_options.
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>