0

既にサインアップしているユーザーの画像を含むサインアップおよびログイン ページがあります。アプリケーションにユーザーをそれぞれログインおよびサインアップするためのセッションとユーザーコントローラーがあります。

セッションコントローラー

    def new
      @users = User.last(3)
    end

    def create
      user = User.find_by_email(params[:session][:email].downcase)
      if user && user.authenticate(params[:session][:password])
        sign_in user
        redirect_back_or user
      else
        flash.now[:error] = "Wrong email/password combination"
        render 'new'
      end
    end

次に、インスタンス変数 @user を使用して、最新の 3 人のユーザーの画像を表示します。これは私のユーザーコントローラーにも当てはまります。slider「新しい」ビューにパーシャルがあります

_slider.html.erb

    <% for user in @users do %>
            <div class="item">
                <%= image_tag user.photos.first.image.url(:large) %>
                <div class="carousel-caption">
                    <h4><%= user.name %></h4>
                    <p><%= user.tagline %></p>
                </div>
            </div>
    <% end %>  

これは、サインアップ/ログインのフォームにエラーが含まれるまで、サインアップとログインの両方のページで正常に機能します。このエラーがスローされundefined method 'each' for nil:NilClassます。@userページをレンダリングした後、変数は使用できないと思います。

新しいアクションを再レンダリングした後、それを利用可能にするにはどうすればよいですか? またはどうすればいいですか?ありがとう

4

3 に答える 3

1

各 http 要求はステートレスであり、以前の値を認識しません (ステートレス)。したがって、パーシャルがレンダリングされる場合は、それが必要@usersであり、新しいアクションも必要@usersです。したがって、必要なのはコントローラにあるか、params[:xx] からオブジェクトをbefore_filter設定/初期化することです@users

before_filter: initialize_values
def initialize_values
  @users = User.last(3)
end
于 2013-02-08T15:22:54.197 に答える
0

@: use @user not user を使用するのを忘れた可能性があります

于 2013-02-08T14:44:40.757 に答える