Question Rails: Comment déterminer le contrôleur / action en vue


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 modifiée, je souhaite afficher 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?


26
2017-11-08 15:59


origine


Réponses:


Généralement la forme partielle ne contient que les champs, pas la balise de formulaire ou les champs pour, mais si vous n'avez pas d'autre moyen, vous pouvez toujours voir ce que params[:action] est actuellement réglé sur et se comporte en conséquence.


27
2017-11-08 16:05



current_page?(action: 'edit')

Voir ActionView :: Helpers :: UrlHelper # current_page?

Rails fait aussi les méthodes controller_path, controller_name, action_name disponible pour une utilisation dans la vue.


94
2017-08-20 16:51



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| %>

C'est, si vous avez un @object à 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.


8
2017-11-08 16:10



Rails 5: Affichage de l'action dans la vue

<%= action_name %>

Si déclaration dans la vue

<% if action_name == "edit" %>
  This is an edit action.
<% end %>

4
2018-01-29 20:02



Il suffit d'utiliser @ _controller.action_name dans la vue


0
2017-07-20 18:17