Доступ к URL-адресу Param Project.find (params [: project_id]) в application_helper.rb - PullRequest
2 голосов
/ 04 октября 2010

Я пытаюсь создать помощника с именем

def current_project
    @current_project = Project.find(params[:project_id])
end

Я хочу это, чтобы в используемом плагине навигации я мог использовать current_project для заполнения навигации.

Проблема у меня в то время как params [: project_id] доступен в конфигурации навигации (navigation.rb), он не работает в application_helper.rb.Я получаю следующую ошибку:

"find_with_ids ': не удалось найти проект без идентификатора"

Вот плагин навигации, если вам интересно: http://github.com/andi/simple-navigation/

идеи почему?

Спасибо

Ответы [ 3 ]

6 голосов
/ 08 октября 2010

Если передача в project_id помощнику не является опцией, вы можете поместить метод в контроллер и отметить его как helper_method. Например:

class ApplicationController < ActionController::Base
  helper_method :current_project

  private
    def current_project
      @current_project ||= Project.find(params[:project_id])
    end
end

Тогда в ваших взглядах вы можете назвать это с помощью:

<% current_project %>

как вы ожидаете.

4 голосов
/ 07 октября 2010

Вместо

def current_project
    @current_project = Project.find(params[:project_id])
end

Попробуйте

def current_project( project_id )
        @current_project = Project.find( project_id )
end

При вызове помощника передайте params [: project_id] для значения параметра project_id.

1 голос
/ 12 октября 2010

Определенно согласен с rjk, вы должны поместить его в контроллер приложения, потому что если вы этого не сделаете, ваши контроллеры не смогут получить доступ к методу.Кажется, что проблема, которую вы получаете, связана с нулевым идентификатором (например, params [: project_id] не пропускается в каждом запросе), вероятно, он передается только в действии навигации, которое переключается между проектами?

IЯ не уверен, что делают внутренности простой навигации, но если params[:project_id] передается только в навигационном действии, то навигационное действие должно сохранять это в сеансе session[:project_id] = params[:project_id].to_i, тогда вы бы определили метод приватного контроллера + хелперследующим образом, используя идентификатор сеанса, чтобы вы могли получить к нему доступ в других действиях:

class ApplicationController < ActionController::Base
  helper_method :current_project

  private
    def current_project
      @current_project ||= Project.find(session[:project_id])
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...