Rails beginner
Rails beginner

Reputation: 14514

Rails: How to determine controller/action in view

This is my form partial:

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

If the action is edit I want to show this instead:

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

How can i achieve this?

Upvotes: 33

Views: 37009

Answers (5)

thedanotto
thedanotto

Reputation: 7327

Rails 5: Display Action within the view

<%= action_name %>

If statement within the view

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

Upvotes: 10

fny
fny

Reputation: 33625

current_page?(action: 'edit')

See ActionView::Helpers::UrlHelper#current_page?

Rails also makes the methods controller_path, controller_name, action_name available for use in the view.

Upvotes: 118

Arugin
Arugin

Reputation: 1947

Just use @_controller.action_name in view

Upvotes: 0

nathanvda
nathanvda

Reputation: 50057

You could write something like

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

That is, if you have an @object to check against. Otherwise you could use action_name (and even controller_name).

So something like:

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

Hope this helps.

Upvotes: 9

tadman
tadman

Reputation: 211740

Generally the form partial only contains the fields, not the form tag or the fields for, but if you have no other way, you can always see what params[:action] is currently set to and behave accordingly.

Upvotes: 31

Related Questions