2011-01-25 2 views
2

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

Вопрос в том, почему 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"} 

UPDATE: Я обнаружил, что Params [] не пусты, когда значения в 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 
+0

Вы можете оставить свой отзыв? –

+0

Это на самом деле ссылка. <% = link_to paper.title, paper_path (paper.url_title)%> –

+0

Я не могу найти что-то не так с кодом, который вы опубликовали. До строки 'match', которую вы опубликовали, есть ли что-нибудь еще в отношении бумаг на маршрутах.rb? – weltraumpirat

ответ

2

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

Преступник был open_id_authentication плагин.

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

+0

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

+0

Нет, я решил удалить openid. Я был единственным, кто зарегистрировался у него. Другие 1000+ регистраций обходили его и просто вводили пользователь/пропуск. –

0

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

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

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

Смежные вопросы