2011-11-08 65 views
25

控制器/動作這是我的形式部分:Rails的:如何確定視圖

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

如果操作是編輯我想,而不是顯示此:

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

我怎樣才能做到這一點?

回答

26

通常情況下,表單部分只包含字段,而不包含表單標籤或字段,但如果您沒有其他方式,則始終可以看到當前設置爲params[:action]並且相應地執行相應操作。

7

你可以寫類似

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

也就是說,如果你有一個@object對證。否則,您可以使用action_name(甚至controller_name)。

因此,像:

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

希望這有助於。

90

current_page?(action: 'edit')

ActionView::Helpers::UrlHelper#current_page?

的Rails也使得controller_pathcontroller_nameaction_name可以在視圖中使用的方法。

+3

這應該是公認的內聲明answer-- 'current_page?'真棒。 – thekingoftruth

+5

嗯。我已經看到它不能按預期工作的情況。即'controller_name =='site''和'action_name =='home''但是current_page?(controller:'site',action:'home')'返回false。 – thekingoftruth

+0

同意。這個答案正是你要找的。 –

0

只需要使用@ _controller.action_name鑑於

1

Rails的5:顯示屏操作視圖內

<%= action_name %> 

如果視圖

<% if action_name == "edit" %> 
    This is an edit action. 
<% end %> 
相關問題