2012-01-13 3 views
2

У меня есть материал с Рубином на Rails 3неопределенный метод `флэш» для # <ActionDispatch :: Request

я попробовать этот простой код

def index 
    flash[:notice] = "ok" 
    respond_to do |format| 
     format.html # index.html.erb 
    end 
    end 

не работает

NoMethodError in DashboardsController#index 
undefined method `flash' for #<ActionDispatch::Request:0x7fee9329a9d0> 

Когда я попробую

redirect_to :some_in, :notice => "ok" 

в другом месте (в some_controller.rb), а затем распечатать это: уведомление в .erb У меня такая же ошибка, неопределенный метод `flash '

Я застрял на этом. Я использовал Google для поиска, но это не помогает.

+0

Наследуются ли вы от 'ApplicationController', который наследуется от' ActionController :: Base'? Например, выглядит ли ваш контроллер: 'класс DashboardsController iwasrobbed

+3

Вы случайно используете жемчуг 'rails-api'? – sethvargo

+0

Для тех, кто использует 'rails-api', см. [Здесь] (http://stackoverflow.com/a/21149689/21115) – dukedave

ответ

-1

flash[:notice] появится только после redirect_to или render (хотя вам понадобится flash.now[:notice]).

Вспышка предназначена для предоставления обратной связи пользователю о состоянии действия, которое предпринимает пользователь. Просто предоставление индекса обычно не относится к этой категории, поскольку оно отображает только данные, а не показывает результат действия пользователя.

В качестве примера:

def create 
    @post = Post.new(params[:post]) 

    respond_to do |format| 
    if @post.save 
     format.html { redirect_to(@post, 
        :notice => 'Post was successfully created.') } 
    else 
     format.html { render :action => "new" } 
    end 
    end 
end 

В этом случае вспышка появится на сообщение Показать только для просмотра, если сообщение было сохранено непосредственно.

+0

Я пробовал все, что я нашел в google, но все еще имеет' NoMethodError в DashboardsController # index undefined method 'flash' для # ' – user1148210

+0

Вопрос задает вопрос о том, что метод' flash' не определен, не отображается ли он или нет. Даже если выход из 'flash [: notice]' call' flash' не должен приводить к NoMethodError при обычных обстоятельствах. –

1

В config/applications.rb вашего приложения добавить этот

config.api_only = false 
1

Пожалуйста, включите ActionDispatch::Flash промежуточное программное обеспечение в ваш конфигурационный/application.rb файл.

config.middleware.use ActionDispatch::Flash 

Это может вам помочь.