Rails基于控制器操作的条件('if')语句

Ell*_*iot 29 ruby-on-rails

可能有更好的方法可以做到这一点,但我正在尝试在rails中根据当前操作在控制器中创建一个if语句(这将在视图中使用).

例如,如果是编辑页面或节目页面等,我想要一些不同的风格 - 是否有一个if语句可以指定这个?

(我需要一个if语句,因为它在部分,多页上使用).

谢谢!

埃利奥特

Dan*_*uis 49

params控制器中可用的哈希包含:controller:action键,用于指定请求的控制器和操作名称.

所以你可以说

if params[:action] == "foo"
  # Show stuff for action 'foo'
elsif params[:action] == "bar"
  # Show stuff for action 'bar'
elsif ...
  # etc.
end
Run Code Online (Sandbox Code Playgroud)


小智 23

IMO部分询问当前的控制器和动作名称是不好的做法.想想"告诉,不要问"(http://www.pragprog.com/articles/tell-dont-ask).也就是说,不要让部分询问它的调用者关于其状态,而是告诉部分你想要它做什么.

一种方法是通过locals选项将变量传递给partial :

<%= render :partial => "/common/toolbar", :locals => {:edit => true} %>
Run Code Online (Sandbox Code Playgroud)

然后在部分:

<% if defined?(edit) && edit %>
... stuff appropriate to edit mode
<% end %>
Run Code Online (Sandbox Code Playgroud)