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

Rai*_*ner 28 ruby ruby-on-rails 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 %>
Run Code Online (Sandbox Code Playgroud)

如果操作是编辑,我想改为显示:

<%= 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 %>
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这一目标?

fny*_*fny 102

current_page?(action: 'edit')

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

轨道也使得方法controller_path,controller_name,action_name可以在视图中使用.

  • 嗯.我见过它没有按预期工作的情况.即当`controller_name =='site'`和`action_name =='home'`但是`current_page?(控制器:'site',action:'home')`返回false. (6认同)
  • 这应该是公认的答案 - "current_page?"太棒了. (3认同)

tad*_*man 28

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


nat*_*vda 8

你可以写点像

<%- form_url = @object.new_record? ? :photo_attributes : :photo %>
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %>
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你@object要检查.否则你可以使用action_name(甚至controller_name).

所以类似于:

<%- form_url = action_name == :edit ? :photo : :photo_attributes %>
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


the*_*tto 6

Rails 5:在视图中显示动作

<%= action_name %>
Run Code Online (Sandbox Code Playgroud)

如果在视图中声明

<% if action_name == "edit" %>
  This is an edit action.
<% end %>
Run Code Online (Sandbox Code Playgroud)