2012-04-06 54 views
1

在我application_controller我說:current_action沒有返回的行動

def instantiate_controller_and_action_names 
      @current_action = action_name 
      @current_controller = controller_name 
     end 

讓我顯示/隱藏我的觀點的某些字段根據當前的行動。例如,添加新用戶時,我希望能夠顯示要填寫的密碼字段,但在編輯用戶時,我不希望顯示密碼字段。

我遇到的問題是@current_action在創建新記錄時僅返回'new'的值,但在編輯記錄時不返回值(如http://localhost:3000/users/6/edit),或者如果我使用反例,並檢查@current_action!='new'...在這兩種情況下,我的字段仍在顯示。

<%if @current_action != 'new'%> 
    <tr><td>AAAAAAA</td></tr> 
    <%else%> 
    <tr> 
    <th class="">Password</th> 
    <th class="">Password Confirmation</th> 
    </tr> 
    <tr> 
    <td><%= f.password_field :password %></td> 
    <td><%= f.password_field :password_confirmation %></td> 
    </tr> 
<%end%> 

發生了什麼'編輯'沒有被返回和/或有沒有更好的/最佳實踐的方式來實現呢?謝謝!

回答

3

而不是使用控制器操作,爲什麼你不測試你的對象?你可以看到你的對象是否是一個新的記錄或用這種方法

 
<% if f.object.new_record? %> 
    Your code for new object 
<% else %> 
You code to edit object 
    <%end%> 

1

好的,所以最簡單的方法來獲取您的控制器和操作名稱是真的只使用參數。所以。

def current_action 
    params["action"] 
end 

def controller_name 
    params["controller"] 
end 

試試看。

1

沒有必要設置動作值

您可以訪問它的觀點是這樣

action_name or params[:action]  #return the current action 

    controller_name or params[:controller]  #return the current controller 

,方便地使用它.........

 <%if action_name != 'new'%> 
      <tr><td>AAAAAAA</td></tr> 
     <%else%> 
      <tr> 
      <th class="">Password</th> 
      <th class="">Password Confirmation</th> 
      </tr> 
      <tr> 
      <td><%= f.password_field :password %></td> 
     <td><%= f.password_field :password_confirmation %></td> 
     </tr> 
     <%end%> 

如果你想要你的代碼的共振不呈現不叫它it.Add

應用控制器和ch eck

  before_filter :instantiate_controller_and_action_names