Как определить вложенные ресурсы для полиморфных моделей с другим пространством имен? - PullRequest
3 голосов
/ 30 июля 2011

Я борюсь с определением маршрута в rout.rb для работы с вложенными ресурсами при наличии полиморфной ассоциации и моделей с разными пространствами имен.

Есть два контроллера (я показываю только важные строки):

/ приложение / контроллеры / проект / профиль / likes_controller.rb

module Project
 module Profile
  class LikesController < Project::ApplicationController
   def toggle
    ...
   end
  end
 end
end

/ приложение / контроллеры / проект / place / profile / languages_controller.rb

module Project
 module Place
  module Profile
   class ProfilesController < Project::ApplicationController
   ...
   end
  end
 end
end

..и две модели, первая из которых имеет полиморфную ассоциацию под названием likeable :

/ app / models / project / profile / like.rb

module Project
 module Profile
  class Like < ActiveRecord::Base
   ...
   belongs_to :likeable, :polymorphic => true
   ...
  end
 end
end

...а вторая модель выглядит как :

/ app / models / project / place / base.rb

module Project
 module Place
  class Base < ActiveRecord::Base

   has_many :likes, :as => :likeable, :class_name => "Project::Profile::Like", :dependent => :destroy

  end
 end
end

... и это мое определение маршрутаas is:

rout.rb

...
scope :module => "project" do

 scope :module => "place" do
  resources :places do
    collection do
      scope :module => "profile" do
        resources :profiles do
            resources :likes
        end
      end
    end
  end
 end

 scope :module => "profile" do
  resources :likes do
   collection do
    post :toggle
   end
  end
 end

end 
...

Как мы видим, ресурс likes является вложенным ресурсом ресурса place .

Чего я хочу достичь?

Я хочу иметь путь к вложенному ресурсу place / likes , который должен point to:

{:action=>"toggle", :controller=>"project/profile/likes"}

и сохраняйте id подходящего, place_id в этом случае.

Я пробовал следующее:

<%= button_to t(:user_likes), ([likeable, likeable.likes.new]), :action => 'toggle', ... %>

, но это приводит к следующему пути:

project_place_profile_basis_project_profile_likes_path

, что неверно.Правильный путь будет project_profile_likes_path.

Доступны следующие маршруты ( рейковые маршруты ):

profile_likes POST /places/profiles/:profile_id/likes(.:format) {:action=>"index", :controller=>"porject/place/profile/likes"}

и

toggle_likes POST /likes/toggle(.:format) {:action=>"toggle", :controller=>"project/profile/likes"}

Кто-нибудь знает, как получить путь к controller => project / profile / likes и action => toggle ?

...