Функциональный тест Rails 3 - get () не может получить доступ к методу контроллера - PullRequest
1 голос
/ 28 ноября 2011

В моем проекте истории принадлежат пользователям, и, как правило, доступ к ним осуществляется через вложенные ресурсы, за исключением действия по отображению глобального списка всех историй.В моем файле rout.rb у меня есть:

 resources :users do
    resources :stories
 end
 match "/all_stories" => "stories#all_stories"  

оператор match создает следующий маршрут:

all_stories   /all_stories(.:format)    {:controller=>"stories", :action=>"all_stories"}

В моем файле stories_controller.rb есть действие с именем: all_stories.

  def all_stories
    @stories = Story.all
  end

На мой взгляд, я звоню link_to следующим образом:

<%= link_to  "All Stories", all_stories_path %>

, что приводит к этой ошибке:

No route matches {:action=>"show", :controller=>"stories", :user_id=>nil, 
:id=>#<Story id: 1, title: "test story 01", desc: "Edited desc for test story 01",
activity: 20, created_at: "2011-11-28 01:07:08", updated_at: "2011-11-28 01:26:31", 
user_id: 5>}

В моем stories_controller_test.rb следующие вызовы GET для :all_stories генерируют перечисленные ошибки:

get( 'all_stories' )
Undefined method `story_path' for #<#<Class:0x0000010430da18>:0x00000101789d10>

get( :all_stories )
undefined method `story_path' for #<#<Class:0x00000102a178b0>:0x00000100ee9cc8>

get( '/all_stories' )
No route matches {:controller=>"stories", :action=>"/all_stories"}

get( {:action=>"all_stories"} )
No route matches {:controller=>"stories", :action=>"{:action=>\"all_stories\"}"}

В первых двух нет «story_path», потому что истории вложены под пользователями. Не уверен, что происходит в следующих двухКакой синтаксис я могу использовать для действия get all_stories в моем контроллере?

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Попробуйте изменить маршрут на

match "/all_stories" => "stories#all_stories", :as => :all_stories

Тогда в вашем коде вы можете ссылаться на all_stories_path или all_stories_url

0 голосов
/ 27 декабря 2011

Я получил эту проблему, но я смог решить ее с помощью @controller используйте @ contr

...