Rails:如何确定视图中的控制器/操作

时间:2011-11-08 15:59:54

标签: ruby-on-rails ruby ruby-on-rails-3

这是我的部分形式:

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

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:98)

current_page?(action: 'edit')

请参阅ActionView::Helpers::UrlHelper#current_page?

Rails还可以在视图中使用方法controller_pathcontroller_nameaction_name

答案 1 :(得分:28)

通常,表单部分仅包含字段,而不包含表单标记或字段,但如果您没有其他方式,则可以始终查看当前设置的params[:action]并执行相应的操作。

答案 2 :(得分:8)

你可以写点像

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

希望这有帮助。

答案 3 :(得分:5)

Rails 5:在视图中显示动作

<%= action_name %>

视图中的if语句

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

答案 4 :(得分:0)

在视图中使用@ _controller.action_name