2013-09-11 4 views
0

У меня есть 3 уровня контроллеров, потому что мне в противном случае пришлось бы столкнуться с большим количеством дублирования. 1-й уровень затем наследует от InheritedResources::Base в камне inherited_resources. Где-то между файлами контроллера я теряю область.Сфера действия класса теряется где-то между 3 уровнями глубинных контроллеров (рельсы)

Первые файлы представления:

# views/hosts/index.html.haml 

= render 'hosts_table' 

# views/hosts/_hosts_table.html.haml 

%table.table 
    %thead 
    %tr 
     %th 
     Delete 
    %tbody.small-body 
    - @elements.each do |element| 
     - puts element.inspect # => #<FeedbackHost _id: 522ebcdf83c336b7d6000002, created_at: 2013-09-10 06:31:59 UTC, updated_at: 2013-09-11 11:17:44 UTC, _type: "FeedbackHost"> 
     %tr 
     %td 
      = link_to "Delete", element, method: :delete, :remote => true, :class => 'btn btn-small' 

Я получаю эту ошибку, которая ссылается на операции удаления на последней строке в таблице:

Started GET "/hosts/feedback_hosts" for 127.0.0.1 at 2013-09-11 22:20:30 +0200 
Processing by Hosts::FeedbackHostsController#index as HTML 
    MOPED: 127.0.0.1:27017 QUERY  database=feedbackzilla_development collection=users selector={"$query"=>{"_id"=>"522887dc83c3368361000964"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.7617ms) 
    MOPED: 127.0.0.1:27017 QUERY  database=feedbackzilla_development collection=hosts selector={"$query"=>{"user_id"=>"522887dc83c3368361000964", "_type"=>{"$in"=>["FeedbackHost"]}}, "$orderby"=>{"_id"=>1}} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.6032ms) 
    Rendered hosts/_hosts_table.html.haml (79.7ms) 
    Rendered hosts/index.html.haml within layouts/application (81.9ms) 
Completed 500 Internal Server Error in 106ms 

NoMethodError - undefined method `feedback_host_path' for #<#<Class:0x007fe3fb3b43e0>:0x007fe3fb4579f0>: 
    actionpack (3.2.12) lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url' 
    actionpack (3.2.12) lib/action_dispatch/routing/polymorphic_routes.rb:135:in `polymorphic_path' 
    actionpack (3.2.12) lib/action_view/helpers/url_helper.rb:111:in `url_for' 
    actionpack (3.2.12) lib/action_view/helpers/url_helper.rb:242:in `link_to' 
    app/views/hosts/_hosts_table.html.haml:27:in `block in _app_views_hosts__hosts_table_html_haml___3804643964694924097_70308574123920' 

Теперь посмотрим на контроллерах ,

третий уровень:

#controllers/hosts/feedback_hosts_controller.rb 

class Hosts::FeedbackHostsController < HostsController 
    def scoped_elements 
    "feedback_hosts" 
    end 
end 

второй уровень:

#controllers/hosts_controller.rb 

class HostsController < ScopedElementsController 
end 

первый уровень:

#controllers/scoped_elements_controller.rb 

class ScopedElementsController < InheritedResources::Base 
    def index 
    @elements = current_user.send(scoped_elements) 
    end 
end 

И, наконец, маршруты:

namespace :hosts do 
    resources :feedback_hosts 
end 

ответ

1

Вам нужно настроить ваш вызов помощника связи немного. Что-то вроде этого, так что он знает, как вложить путь к элементу:

= link_to "Delete", [:hosts, element], method: :delete, :remote => true, :class => 'btn btn-small' 
1

пробег

rake routes 

в консоли, я думаю, что ваше имя пути должно быть что-то вроде «hosts_feedback_hosts_path»