1

Я создал модель наследования одиночной таблицы в файле модели и испытываю трудности с маршрутизацией. Когда я использую: как в моем ресурсе, он переименовывает мой именованный путь.Вложенная маршрутизация для одиночных таблиц Наследование модели rails 3.1

Модель файла:

class Account < ActiveRecord::Base 
    belongs_to :user 
end 
class AdvertiserAccount < Account 
end 
class PublisherAccount < Account 
end 

routes.rb

resources :advertiser_accounts, :as => "accounts" do 
    resources :campaigns 
end 

я использовал: как в моих маршрутах, потому что это одна таблица наследования, и я хочу передать ACCOUNT_ID и не advertiser_account_id. Моя ссылка http://127.0.0.1:3000/advertiser_accounts/1/campaigns

/advertiser_accounts/:account_id/campaigns/:id(.:format) 

Однако, используя: а переименовывает свой путь от имени advertiser_account_campaigns до account_campaigns. Мой маршрут выглядит

account_campaigns GET /advertiser_accounts/:account_id/campaigns(.:format) campaigns#index 

Так что, когда я создаю новый элемент с помощью form_for, я хотел бы получить «неопределенный метод` advertiser_account_campaigns_path '»

Отредактировано: текущий взломан решение

хак вокруг пути что я использую, это дублировать код в файле маршрутов. У кого-нибудь есть предложения?

resources :advertiser_accounts, :as => "accounts" do 
    resources :campaigns 
end 
resources :advertiser_accounts do 
    resources :campaigns 
end 
+0

Можете ли вы опубликовать свой код erb/form? спасибо – plainjimbo

+1

Собственно, это не только код формы. Я не могу ссылаться на свой вложенный путь, если я использую: as. Например, link_to code <% = link_to «Показать всю кампанию», advertiser_account_campaigns_path (@advertiser_account)%> будет возвращать «неопределенный метод» advertiser_account_campaigns_path ». Это связано с тем, что именованный путь для advertiser_account_campaigns_path получил переименование в account_campaigns_path, когда я использую: as => «accounts». Я хочу, чтобы иметь возможность создать допустимую ссылку, например 127.0.0.1:3000/advertiser_accounts/10/campaigns, без дублирования слишком большого кода в routes.rb – user1157352

+0

с той же проблемой, удалось ли вам найти решение? – pduersteler

ответ

0

При запуске «реки маршрутов» с вашей установкой вы увидите это:

account_campaigns GET  /advertiser_accounts/:account_id/campaigns(.:format)   campaigns#index 
         POST  /advertiser_accounts/:account_id/campaigns(.:format)   campaigns#create 
new_account_campaign GET  /advertiser_accounts/:account_id/campaigns/new(.:format)  campaigns#new 
edit_account_campaign GET  /advertiser_accounts/:account_id/campaigns/:id/edit(.:format) campaigns#edit 
    account_campaign GET  /advertiser_accounts/:account_id/campaigns/:id(.:format)  campaigns#show 
         PUT  /advertiser_accounts/:account_id/campaigns/:id(.:format)  campaigns#update 
         DELETE  /advertiser_accounts/:account_id/campaigns/:id(.:format)  campaigns#destroy 
      accounts GET  /advertiser_accounts(.:format)        advertiser_accounts#index 
         POST  /advertiser_accounts(.:format)        advertiser_accounts#create 
      new_account GET  /advertiser_accounts/new(.:format)       advertiser_accounts#new 
     edit_account GET  /advertiser_accounts/:id/edit(.:format)      advertiser_accounts#edit 
       account GET  /advertiser_accounts/:id(.:format)       advertiser_accounts#show 
         PUT  /advertiser_accounts/:id(.:format)       advertiser_accounts#update 
         DELETE  /advertiser_accounts/:id(.:format)       advertiser_accounts#destroy 

Таким образом, вы должны использовать «account_campaingns_path» в этой конфигурации, «: как» на самом деле изменяют звонки в коде не пути в URL. Если вы хотите изменить пути, вы должны использовать «: path =>», а не «: as =>».

Rails guide on routing также показывает некоторые примеры с «: as» и «: path» и результирующими путями и помощниками, вам нужно немного поискать, потому что думайте, что они используются только в примерах, объясняющих другие случаи.

Edit: перечитывая свой вопрос, я думаю, вы также можете посмотреть на member routes, я не уверен, что это то, что вы хотите иметь в виду, с ним быть одно наследство и не желая, чтобы пройти в advertiser_account в «: ACCOUNT_ID» ?