1

私のapplication_controllerに追加しました:

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

「編集」が返されない、またはこれを達成するためのより良い/ベストプラクティスの方法はありますか? ありがとう!

4

3 に答える 3

3

コントローラー アクションを使用するのではなく、なぜオブジェクトをテストしないのでしょうか? このメソッドを使用して、オブジェクトが新しいレコードであるかどうかを確認できます

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

于 2012-04-06T12:20:30.663 に答える
2

アクションの値を設定する必要はありません

このようなビューでアクセスできます

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

そして、あなたのコードが必要な場合は、それを呼び出さないようにレンダリングされていません.この行を追加してください

アプリケーションコントローラーとチェック

           before_filter :instantiate_controller_and_action_names
于 2012-04-06T12:19:35.030 に答える
1

わかりましたので、コントローラーとアクションの名前を取得する最も簡単な方法は、本当にパラメーターを使用することです。そう。

def current_action
  params["action"]
end

def controller_name
  params["controller"]
end

試してみてください。

于 2012-04-06T12:16:51.723 に答える