web-dev-qa-db-fra.com

Rails: Comment déterminer le contrôleur/l'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 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? 

27
Rails beginner

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.

28
tadman

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.

8
nathanvda

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

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

0
Arugin