2012-05-23 3 views
0

Окружающая среда:link_to терпит неудачу с другими LINK_TO на той же странице, но работает в одиночку

  • Rails 3.2.3
  • Mac OS X Lion
  • рубиново-1.9.3-Р194 (МРТ)

У меня есть приложение rails, и я использую app/views/layouts/application.html.erb как своего рода «левую навигационную панель» для некоторых ссылок, которые я использую в качестве параметров меню.

В меню есть две ссылки, использующие link_to (сокращенно для краткости здесь). Если я удалю одну ссылку и запустим приложение, оставшаяся ссылка сделает то, что она должна делать. Если я удалю второе звено и ВОССТАНАВЛИВАЮ первую ссылку, первая ссылка сделает то, что должен делать ИТ.

Если, однако, у меня есть обе ссылки в меню одновременно, щелчок по одному из них будет работать, но при нажатии второй создается ошибка времени выполнения.

Использование самого источника Pry и Rails (3.2.3), я имею pin-point, где ошибка возникает в структуре. Исключение происходит в actionpack-3.2.3/Lib/ACTION_VIEW/template.rb и происходит в методе визуализации на следующей строке кода:

def render(view, locals, buffer=nil, &block) 
    ActiveSupport::Notifications.instrument("!render_template.action_view", :virtual_path => @virtual_path) do 
    compile!(view) 
    view.send(method_name, locals, buffer, &block) # <----ERROR OCCURS HERE 
    end 
rescue Exception => e 
    handle_render_error(view, e) 
end 

значение имя_метода = _app_views_layouts_application_html_erb___1387085669206687706_70334317584180

Там is метод по этому имени на вид. Когда выполняется 'send', генерируется следующее исключение.

ActionController::RoutingError: No route matches {:action=>"signup_for_role",  
:controller=>"assignments", :club_id=>nil, :member_id=>[#<Member id: 2, first_name: 
"Joseph", last_name: "Smith", start_date: "2012-01-01", end_date: "9999-12-31", 
created_at: "2012-04-07 13:58:46", updated_at: "2012-05-06 21:54:12", club_id: 2, email:  
"[email protected]", assignable: true, address_one: nil, address_two: nil, city: nil, 
state: nil, zip_code: nil, phone: nil, mobile_phone: nil>]} 

Поскольку код в методе генерируется Rails, а не в файле исходного кода, я не могу пройти через него с Поддеть; Я могу только «отправить» сообщение и увидеть результат.

Вот код из макета с двумя ссылками на вопрос:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>MyApp</title> 
    <%= stylesheet_link_tag "application" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    </head> 
    <body> 
    <div style='padding-left:10px; margin-top:10px; ' > 
     <div class='container' style='margin-top:50px; margin-left:50px;padding-right:200px; '> 

     <!-- This link_to works, whether alone, or when the other link_to is present --> 
     <%= link_to "Sign Up for a Role", signup_for_role_club_member_assignments_path(params[:club_id], current_user_as_member) %> 
     <br/><br/> 

     <!-- This link_to fails when both link_to's are present, but works when the other link_to is removed. --> 
     <%= link_to "Clubs", clubs_path %><br> 


     </div> 
     <!-- ***************************************************************** --> 
     <!-- Yield below... this is where the currently selected view displays --> 
     <!-- ***************************************************************** --> 
     <div class='container' style='margin-left:200px' > 
     <%= yield %> 
     </div> 
    </div> 
    </body> 
</html> 

Наконец, вот мой routes.rb файл:

Rolemaster::Application.routes.draw do 

    resources :sessions 
    resources :enrollments 
    resources :logs 

    resources :clubs do 
    resources :members do 
     resources :assignments do 
     collection do 
      get 'signup_for_role' 
      get 'display_success' 
      get 'past_activity' 
     end 
     end 
     resources :absences 
    end 
    resources :roles 
    resources :role_groups 

    resources :meetings do 
     get 'forassignment', :on => :collection 
     get 'print' 
     resources :assignments 
    end 

    resources :assignments do 
     post 'generate', :on => :collection 
    end 
    resources :absences do 
     get 'list', :on => :collection 
    end 
    end 


    resources :users do 
    put "update_password" => "users#update_password" 
    put "update_email" => "users#update_email" 
    get "edit_password" => "users#edit_password" 
    get "edit_email" => "users#edit_email" 
    end 

    match "agendas/print" 
    get "enrollments/new" 
    post "enrollments/create" 
    get "log_in" => "sessions#new", :as => "log_in" 
    get "log_out" => "sessions#destroy", :as => "log_out" 
    get "sign_up" => 'users#new', :as => 'sign_up' 
    get "test/email" 
    get "sessions/revoke_admin" 
    get "sessions/revoke_super_user" 


    get "admins" => "admins#index" 
    root :to => 'sessions#new' 
end 

Любая помощь очень ценится. Наверное, я потратил на это 20 часов или больше.

+0

, но у вас ошибка с первой ссылки ... club_id ноль и member_id является массив –

+0

Юрий ... первый ссылка работает поиск и как она была задумана. current_user_as_member - это метод в моем ApplicationController, который возвращает правильное значение для зарегистрированного пользователя. Итак, эта ссылка работает. Это (должно быть) супер-простые клубы, которые не работают. – MotownJoe

+0

Кроме того, я должен упомянуть, что ROUTING для этих двух ссылок действительно работает. Они получают правильное действие в правильном контроллере. Это визуализация представления, где возникает проблема. – MotownJoe

ответ

0

Всегда читать сообщения об ошибках Истина где-то там)

params[:club_id] is nil