J'ai vérifié l'ancien post similaire mais j'ai toujours des problèmes.Rails 5 - Rendu nouveau avec le paramètre
Lorsque je crée une nouvelle liste l'URL se présente comme ci-dessous: http://localhost:3000/listings/new?plan=1
Dans le form_for je me cache certains champs lorsque le plan = 1
<%= form_for(@listing) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.hidden_field :plan, :value => @plan %>
<%= f.label :Title %>
<%= f.text_field :title, class: 'form-control' %>
<!-- don't show description for standard plan -->
<% if @plan != 1.to_s %>
<%= f.label :Description %>
<%= f.text_area :description, :rows => 10,
placeholder: "Describe your business...", class: 'form-control' %>
<% end %>
Dans le ListingsController je mis le plan avant l'action:
before_action :set_plan, only: [:new, :create]
def set_plan
@plan = params[:plan]
end
donc je peux l'utiliser comme champ caché sur le formulaire ci-dessus.
Mon problème commence lorsque j'enregistrer le formulaire avec des erreurs. Le nouvel URL du formulaire est remplacé par http://localhost:3000/listings. Je peux voir le plan @ = 1 toujours sur la forme:
<input value="1" type="hidden" name="listing[plan]" id="listing_plan" />
, mais maintenant la forme montre tous les champs (qui devrait être caché en raison de cette condition <% si @plan = 1.to_s% >)
Actions en ListingsController:
def new
@listing = Listing.new
end
def create
@listing = current_user.listings.build(listing_params) if logged_in?
@plan = @listing.plan
if @listing.save
flash[:success] = "Listing created!"
redirect_to @listing
else
render 'new'
end
end
J'ai essayé quelque chose comme ça, mais sans succès: render: action => 'nouveaux',: le plan => @ listing.plan et quelques autres
Comment puis-je masquer ces champs en cas d'erreur?
vous ne pouvez pas accéder au paramètre plan avec '@ plan', utilisez plutôt' params [: plan] ' –
Lorsque je vais au premier lien, je suis dans l'action Nouvelle: paramètres:! Ruby/hash: ActiveSupport :: HashWithIndifferentA Plan ccès : « 1 » contrôleur: annonces action: Nouvelle mais quand je sauve le pour les erreurs qu'il va dans Créer: paramètres:Ruby/hachage: ActiveSupport :: HashWithIndifferentAccess plan : '1' titre: '' permis: false commettras: Inscrivez-vous contrôleur: annonces l'action: créer Le plan est là, mais quand je le fais à lui mendier de Create: \ @plan = params [: plan] il n'obtient pas la valeur pour \ @plan. Pourquoi? – 82skynet