Я борюсь с определением маршрута в 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 ?