Rails/Ruby - Remplir le formulaire avec les données transmises à partir d'une autre page
Comment puis-je obtenir les valeurs pour préremplir un nouveau device
forme lors de la navigation à partir de rfid
partielle de view/cabinet/show
page? device
has_one rfid
.
Le lien de cabinet/show:
<%= link_to "Create New Device (non-functional)", new_device_path({:id => @rfid.id, cabinet_id: @cabinet.id}), :class => "btn btn-primary" %>
La devices_controller
, je veux avoir la méthode create de travail lors de l'0 ou 2 paramètres sont transmis:
def create(options)
if options[:cabinet_id] and options[:id]
@rfid = Rfid.find(params[:id])
@device = Device.new(params[:device])
@device.rfid = @rfid
@device.cabinet_id = :cabinet_id
else
@device = Device.new(params[:device])
@cabinet = Cabinet.find(params[:device][:cabinet_id])
@device.row_id = @cabinet.row_id
end
respond_to do |format|
if @device.save and @cabinet.refresh_capacity_used and @cabinet.refresh_consumption
format.html { redirect_to @device, notice: 'Device was successfully created.' }
format.json { render json: @device, status: :created, location: @device }
else
format.html { render action: "new" }
format.json { render json: @device.errors, status: :unprocessable_entity }
end
end
fin
La cabinet_id et rfid partie de la nouvelle device/_form
:
<tr>
<th>Cabinet</th>
<td><%= f.select :cabinet_id, options_from_collection_for_select(Cabinet.order(:name).all, "id", "name", @device.cabinet_id) %></td>
</tr>
<tr>
<th>RFID</th>
<td><%= f.text_field :rfid, :value => params[:rfid]%></td>
</tr>
Merci.
Êtes-vous seulement essayé d'obtenir la RFID pour préremplir?
Non, juste de prendre une étape à la fois. J'espère que si je figure sur la rfid, je vais obtenir le cabinet sur mon propre.
J'ai répondu avec le code de pré-remplir les deux champs. Pouvez-vous me dire si cela fonctionne?
Non, juste de prendre une étape à la fois. J'espère que si je figure sur la rfid, je vais obtenir le cabinet sur mon propre.
J'ai répondu avec le code de pré-remplir les deux champs. Pouvez-vous me dire si cela fonctionne?
OriginalL'auteur Joe Essey | 2013-03-14
Vous devez vous connecter pour publier un commentaire.
Si vous avez:
vous pouvez obtenir préremplir le
rfid
etcabinet_id
champs à l'aide de:Noter que votre params clé doit correspondre à la valeur indiquée dans la table de hachage dans votre
link_to
tag.Sauf que
_form.rb
est également utilisé par leedit
action, et maintenant de l'édition de ces valeurs est cassé.vous avez obtenu d'être plaisante; si votre
_form.rb
valeurs sont touchées, vous les avez mal mappé. Aussi, le contexte autour du problème que vous rencontrez pourrait être utile, en particulier dans le suivi d'une réponse qui est de trois ans. Quelle est la version de Rails de vous même à l'aide? La version a été heurté plusieurs fois depuis que cette question a été répondu.Je suis en supposant que vous êtes ce qui suggère qu'il remplace
<%= f.text_field :rfid %>
avec<%= f.text_field :rfid, :value => params[:id] %>
dans_form.html.erb
? S'il fait cela, alors oui, la valeur par défaut estparams[:id]
. Mais si_form.html.erb
est inclus paredit.html.erb
parce que l'utilisateur essaie de modifier un@device
, puis lerfid
valeur de la@device
sera touchée.J'ai enfin trouvé un moyen d'éviter cela: changer
<%= f.select :cabinet_id, options_from_collection_for_select(Cabinet.order(:name).all, "id", "name", params[:cabinet_id]) %>
à<%= f.select :cabinet_id, options_from_collection_for_select(Cabinet.order(:name).all, "id", "name", params[:cabinet_id] || @device.cabinet_id) %>
. De cette façon, siparams[:cabinet_id]
est vide, alors@device.cabinet_id
(la valeur existante) sera utilisé à la place.OriginalL'auteur zeantsoi
@zeantsoi réponse que publiés pour la plupart des œuvres, mais il casse de la fonction d'édition. Comme un correctif, je propose ce qui suit modification mineure:
De cette façon, si
params[:cabinet_id]
est absent,@device.cabinet_id
(la valeur existante) persiste.OriginalL'auteur Stack Overflown