2017-01-13 3 views
0

Таким образом, внутри блока response_to условие if stockUpdated and stock != {} завершается с ошибкой, и выполняется блок else (я проверил это с помощью beebug). Таким образом, сервер должен перенаправить, но вместо этого он отображает. Еще одна странность в том, что с момента его рендеринга flash.now[:alert] -'...' должен работать, но это также не отображается в представлении (возьмите мое слово за него).Почему Rails 4 рендерит мой взгляд, когда я использую redirect_to внутри блока response_to

контроллер:

respond_to do |format| 
     if stockUpdated and stock != {} 
      format.js 
      format.html { 
       redirect_to user_path(@user), 
       notice: "#{stock.symbol} has been added to your portfolio!" 
      } 
     else 
      flash.now[:alert] = "We could not add that stock to your portfolio." 
      format.html{redirect_to user_path(@user)} 
     end 
    end 

сервер:

Started GET "https://stackoverflow.com/users/1" for ::1 at 2017-01-13 11:48:21 -0500 
Processing by UsersController#show as HTML 
Parameters: {"id"=>"1"} 
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]] 
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]] 
Stock Load (0.5ms) SELECT "stocks".* FROM "stocks" INNER JOIN "assets" ON "stocks"."id" = "assets"."stock_id" WHERE "assets"."user_id" = $1 [["user_id", 1]] 
Rendered stocks/_stock.html.erb (0.5ms) 
Rendered users/show.html.erb within layouts/application (13.7ms) 
Completed 200 OK in 92ms (Views: 81.6ms | ActiveRecord: 2.0ms) 
+0

Просто для уточнения: 'user_path (@user)' является '/ пользователей/1'? Если да, тогда ваш журнал сервера покажет этот маршрут (перенаправленный). – mrlew

ответ

1

Вы должны добавить and return после редиректа:

respond_to do |format| 
    if stockUpdated and stock != {} 
    format.js 
    format.html { 
     redirect_to user_path(@user), notice: "#{stock.symbol} has been added to your portfolio!" 
    } 
    else 
    format.html{ 
     redirect_to user_path(@user), flash: {alert: "We could not add that stock to your portfolio."} and return 
    } 
    end 
end 
+0

Это сработало! Но почему не работает 'flash.now'? –