2011-11-08 14 views
25

Questa è la mia forma parziale:Rails: Come determinare regolatore/azione in 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 %> 

Se l'azione è di modifica voglio mostrarvi questo, invece:

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

Come posso raggiungere questo obiettivo ?

risposta

26

In genere il modulo parziale contiene solo i campi, non il tag modulo oi campi per, ma se non si ha altro modo, è sempre possibile vedere cosa è attualmente impostato su params[:action] e comportarsi di conseguenza.

7

Si potrebbe scrivere qualcosa di simile a

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

Cioè, se si dispone di un @object per controllare contro. Altrimenti è possibile utilizzare action_name (e anche controller_name).

Quindi qualcosa di simile:

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

Spero che questo aiuti.

90

current_page?(action: 'edit')

Vedi ActionView::Helpers::UrlHelper#current_page?

Rails rende anche i metodi controller_path, controller_name, action_name disponibili per l'uso nella visualizzazione.

+3

Questo dovrebbe essere il accettata answer-- 'current_page?' è fantastico. – thekingoftruth

+5

Hmm. Ho visto casi in cui non funziona come previsto. cioè quando 'controller_name == 'site'' e' action_name ==' home'' ma 'current_page? (controller: 'site', action: 'home')' restituisce false. – thekingoftruth

+0

Accetto. Questa risposta è esattamente ciò che stai cercando. –

0

Basta usare @ _controller.action_name in vista

1

Rails 5: Display Funzione all'interno della vista

<%= action_name %> 

Se l'affermazione all'interno della vista

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