Ceci est ma forme partielle:
<%= f.simple_fields_for :photo_attributes, :html => { :multipart => true } do |d| %>
<%= d.label :image, :label => 'Upload logo', :required => false %>
<%= d.file_field :image, :label => 'Image, :required => false', :style => 'margin-bottom:2px' %>
<%= d.input :image_url, :label => 'Billed URL', :required => false %>
<% end %>
Si l'action est edit, je veux montrer ceci à la place:
<%= f.simple_fields_for :photo, :html => { :multipart => true } do |d| %>
<%= d.label :image, :label => 'Upload logo', :required => false %>
<%= d.file_field :image, :label => 'Image, :required => false', :style => 'margin-bottom:2px' %>
<%= d.input :image_url, :label => 'Billed URL', :required => false %>
<% end %>
Comment puis-je atteindre cet objectif?
Généralement, la forme partielle du formulaire ne contient que les champs, pas la balise de formulaire ni les champs pour, mais si vous n'avez pas d'autre moyen, vous pouvez toujours voir ce que params[:action]
est actuellement défini et se comporter en conséquence.
Vous pourriez écrire quelque chose comme
<%- form_url = @object.new_record? ? :photo_attributes : :photo %>
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %>
Autrement dit, si vous avez un @object
avec lequel vérifier. Sinon, vous pourriez utiliser action_name
(et même controller_name
).
Donc, quelque chose comme:
<%- form_url = action_name == :edit ? :photo : :photo_attributes %>
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %>
J'espère que cela t'aides.
Rails 5: Action d'affichage dans la vue
<%= action_name %>
Si déclaration dans la vue
<% if action_name == "edit" %>
This is an edit action.
<% end %>
Il suffit d'utiliser @ _controller.action_name dans la vue