J'ai un problème lors de la soumission d'un formulaire. J'ai deux modèles, :service
et :booking
. Pour un service, il y a un bouton:Problème lors de la validation et du rendu
<%= link_to "Book Now", new_booking_path(service_id: @service.id) %>
Lorsque ce bouton est cliqué, il amène l'utilisateur à l'_form.html.erb
où ils peuvent réserver le service. Ceci est le formulaire de réservation simplifiée:
<%= simple_form_for (@booking) do |f| %>
<%= f.label "Booking Date" %><br>
<%= f.text_field :date %>
<%= f.text_field :time, :id => "timepicker" %>
<%= f.input :address, label: "Address" %>
<%= f.input :postcode, label: "Postcode" %>
<%= f.input :suburb, label: "Suburb" %>
<%= f.input :servicetitle, :input_html => { :value => @service.title } %>
<%= f.input :serviceprice, :input_html => { :value => @service.price } %>
<%= f.input :servicetime, :input_html => { :value => @service.time } %>
<%= f.button :submit %>
<% end %>
Comme vous pouvez le voir, j'ai trois champs, :servicetitle
, :serviceprice
et :servicetime
.
Ces champs obtiennent leurs valeurs d'entrée à partir de la valeur @service.id
transmise via le bouton link_to. Je suis en mesure d'accéder aux dossiers comme @service.title
en utilisant cette variable d'instance dans le bookings_controller
:
@service = Service.find_by_id(params[:service_id])
Le problème que j'ai est que si l'un de la validation sur le terrain échoue (dire le champ :date
), l'utilisateur est redirigé Retour à la _form.html.erb
et je reçois l'erreur
NoMethodError des réservations # créer
méthode non définietitle
Je voudrais également obtenir les erreurs:
méthode non définie
price
et:
méthode non définie
time
Je pense que c'est parce que Rails doesn pas avoir accès à @service
variable d'instance plus? Comment puis-je résoudre ce problème en cas d'échec d'une validation?
Modifier:
Créer méthode contrôleur réservations:
def create
@booking = current_user.bookings.build(bookings_params)
if @booking.save
BookingMailer.form_confirmation(@booking).deliver
redirect_to @booking
else
render 'new'
end
end
Comment le service est-il mis en œuvre par rapport à la réservation? Quels sont les champs de saisie? – vee
@vee Un service fait partie d'une réservation, et une réservation dispose de nombreux services. Ma forme fonctionne correctement, sauf quand elle rend le formulaire erroné, la variable d'instance '@ service' semble être détruite –
A droite, votre méthode create ne définit pas' @ service', c'est pourquoi vous perdez les valeurs. Pouvez-vous poster votre action controller 'create'? – vee