2011-11-08 29 views
25

Esta es mi forma parcial:Rieles: Cómo determinar controlador/acción en vista

<%= 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 la acción es de edición Quiero mostrar esto en su lugar:

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

¿Cómo puedo lograr esto ?

Respuesta

26

En general, el formulario parcial solo contiene los campos, no la etiqueta del formulario o los campos para, pero si no tiene otra opción, siempre puede ver en qué está configurado actualmente params[:action] y comportarse como corresponde.

7

Se podría escribir algo así como

<%- form_url = @object.new_record? ? :photo_attributes : :photo %> 
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %> 

Es decir, si usted tiene una @object para comprobar en contra. De lo contrario, podría usar action_name (e incluso controller_name).

Así que algo como:

<%- form_url = action_name == :edit ? :photo : :photo_attributes %> 
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %> 

espero que esto ayude.

90

current_page?(action: 'edit')

Ver ActionView::Helpers::UrlHelper#current_page?

rieles también hace que los métodos controller_path, controller_name, action_name disponibles para su uso en la vista.

+3

Esto debe ser aceptada la answer-- 'current_page?' es impresionante. – thekingoftruth

+5

Hmm. He visto casos en los que no funciona como se esperaba. es decir, cuando 'controller_name == 'site'' y' action_name ==' home'' pero 'current_page? (controller: 'site', action: 'home')' devuelve false. – thekingoftruth

+0

De acuerdo. Esta respuesta es exactamente lo que estás buscando. –

0

sólo tiene que utilizar @ _controller.action_name en vista

1

rieles 5: Pantalla de acción dentro de la vista

<%= action_name %> 

Si la declaración dentro de la vista

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