【发布时间】:2012-04-01 00:03:05
【问题描述】:
我在我的模型文件中创建了一个单表继承模型,并且在路由方面遇到了困难。当我在资源中使用 :as 时,它会重命名我的命名路径。
模型文件:
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
我在路由中使用了 :as,因为它是单表继承,我想传递 account_id 而不是advertisingr_account_id。我的链接是http://127.0.0.1:3000/advertiser_accounts/1/campaigns
/advertiser_accounts/:account_id/campaigns/:id(.:format)
但是,使用 :as 将我的命名路径从 ads_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
【问题讨论】:
-
您也可以发布您的 erb/form 代码吗?谢谢
-
其实这不仅仅针对表单代码。如果我使用 :as,我无法链接到我的嵌套路径。例如,link_to code 将返回“undefined method `advertiser_account_campaigns_path'”。这是因为当我使用 :as=> "accounts" 时,advertisingr_account_campaigns_path 的命名路径被重命名为 account_campaigns_path。我希望能够创建像 127.0.0.1:3000/advertiser_accounts/10/campaigns 这样的有效链接,而无需在 routes.rb 中复制太多代码
-
遇到了同样的问题,你找到解决办法了吗?
标签: ruby-on-rails-3 routes parameter-passing single-table-inheritance named-routing