Устранение неполадок в пустых хэшах params с момента обновления Rails3 - PullRequest
2 голосов
/ 25 января 2011

У меня есть именованный маршрут, который правильно тестирует консоль и показывает: url_title, который должен быть включен в params [], но params [] всегда пуст.

Вопрос в том, почему params [] пуст? Я ожидаю, что он должен иметь params [: url_title].

Я также удалил этот маршрут и использовал ресурс по умолчанию, а params [] все еще пуст.

Я проверял параметры с помощью логгера.

Мое приложение представляет собой обновление с Rails 2.3.5 до Rails 3.0.3.

Вот сводка кода того, что происходит.

# this is my route
match 'papers/:url_title' => 'papers#show', :as => :permalinkpaper

# this is link_to and the generated url being called
<%= link_to paper.title, paper_path(paper.url_title) %>
http://localhost:3000/papers/great-passion

# which properly matches to this controller#action for papers#show 
def show
    @paper = Paper.where(:url_title => params[:url_title]).first()
    PaperHistory.add( current_user, @paper.id )

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @paper }
      format.json { render :json => @paper }
      format.mobile # { render :layout => false }
    end
  end

# which generals this error because the Paper looking returns noting because the params[:url_title] is nil
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

# the log stack trace
Started GET "/papers/great-passion" for 127.0.0.1 at Mon Jan 24 23:04:04 -0600 2011
  Processing by PapersController#show as HTML

  SQL (0.7ms)  SHOW TABLES
  SQL (0.5ms)  SHOW TABLES
  Paper Load (0.7ms)  SELECT `papers`.* FROM `papers` WHERE (`papers`.`url_title` IS NULL) ORDER BY title LIMIT 1
Completed   in 119ms

RuntimeError (Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id):
  app/controllers/papers_controller.rb:43:in `show'



# I've validated the route in the console and it seems to know :url_title is the proper value
>> r = ActionController::Routing::Routes
>> r.recognize_path "/papers/great-passion"
=> {:action=>"show", :url_title=>"great-passion", :controller=>"papers"} 

ОБНОВЛЕНИЕ: Я обнаружил, что параметры [] НЕ пустые, когда значения находятся в URL, например, при выполнении поиска.

http://localhost:3000/papers?utf8=%E2%9C%93&keywords=passion

Это успешно производит

Started GET "/papers?utf8=%E2%9C%93&keywords=passion" for 127.0.0.1 at Tue Jan 25 00:20:07 -0600 2011
  Processing by PapersController#index as HTML
  Parameters: {"utf8"=>"✓", "keywords"=>"passion"}
params: utf8✓keywordspassion

Ответы [ 2 ]

2 голосов
/ 26 января 2011

Спасибо всем за помощь.Я смог разобрать мое приложение по частям и, наконец, получить параметры [], чтобы показать.

Виновным был плагин open_id_authentication .

У меня было несколько плагинов вкаталог vendors, поэтому я удалил их все, и после нескольких ошибок (в связи с отсутствием плагинов) все заработало.Я систематически заменял плагины, и когда я добрался до open_id_authentication, обнаружил, что params [] снова исчезли.

0 голосов
/ 25 июля 2013

У меня было другое решение этой проблемы, которое я опубликую здесь на случай, если кто-нибудь столкнется с той же проблемой.Я работал над частью сайта для сброса пароля и пробовал разные вещи, такие как ввод URL-адреса вручную, указание контроллера и действия, использование простой (минимальной) формы и тому подобное, но все это не удалось.Появилось сообщение об ошибке: параметр электронной почты был пустым.

Просмотр журналов исключений показал, что не только параметр электронной почты был пустым, но даже отсутствовала галочка UTF-8.В хэше params единственными вещами были контроллер и действие.Перезагрузка страницы также не вызвала обычную волну повторного предоставления информации.

Оказывается, проблема была в SSL .Страница пыталась использовать SSL, но не имела разрешения, и каким-то образом молча убивала форму.Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...