Ruby on rails 3 单表继承模型rails 3.1的嵌套路由
我在模型文件中创建了一个单表继承模型,在路由方面遇到了困难。当我在我的资源中使用:时,它会重命名我的命名路径 模型文件:Ruby on rails 3 单表继承模型rails 3.1的嵌套路由,ruby-on-rails-3,routes,parameter-passing,single-table-inheritance,named-routing,Ruby On Rails 3,Routes,Parameter Passing,Single Table Inheritance,Named Routing,我在模型文件中创建了一个单表继承模型,在路由方面遇到了困难。当我在我的资源中使用:时,它会重命名我的命名路径 模型文件: class Account < ActiveRecord::Base belongs_to :user end class AdvertiserAccount < Account end class PublisherAccount < Account end 我在我的路由中使用了:因为它是一个单表继承,我希望传递帐户id,而不是广告商帐户id。我
class Account < ActiveRecord::Base
belongs_to :user
end
class AdvertiserAccount < Account
end
class PublisherAccount < Account
end
我在我的路由中使用了:因为它是一个单表继承,我希望传递帐户id,而不是广告商帐户id。我的链接是
但是,使用:as可将我的命名路径从广告商帐户活动重命名为帐户活动。我的路线看起来像
account_campaigns GET /advertiser_accounts/:account_id/campaigns(.:format) campaigns#index
因此,当我使用form_for创建一个新项目时,我会得到未定义的方法“advertiser_account_activities_path”
编辑:当前被黑客攻击的解决方案
我正在使用的一种破解方法是复制routes文件中的代码。有人有什么建议吗
resources :advertiser_accounts, :as => "accounts" do
resources :campaigns
end
resources :advertiser_accounts do
resources :campaigns
end
如果使用设置运行rake routes,您将看到:
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,:as实际上更改了代码中的调用,而不是url中的路径。如果要更改路径,应使用:path=>而不是:as=>
还显示了一些带有:as和:path的示例以及生成的路径和帮助程序,您需要进行一些搜索,因为您认为它们仅用于解释其他情况的示例中
编辑:重读你的问题,我想你可能也想看看,我不确定这是否是你想要的意思,因为它是一个单一的继承,不想通过广告商帐户的“:account\u id”?如果你用你的设置运行rake routes,你会看到:
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,:as实际上更改了代码中的调用,而不是url中的路径。如果要更改路径,应使用:path=>而不是:as=>
还显示了一些带有:as和:path的示例以及生成的路径和帮助程序,您需要进行一些搜索,因为您认为它们仅用于解释其他情况的示例中
编辑:重读你的问题,我想你可能也想看看,我不确定这是否是你想要的意思,因为它是一个单一的继承,不想通过广告商帐户的“:account\u id”?你也可以发布你的erb/表单代码吗?谢谢,实际上,这不仅仅是表单代码。如果使用:as,则无法链接到嵌套路径。例如,link_to code将返回未定义的方法“广告客户账户活动路径”。这是因为当我使用:as=>accounts时,广告客户的命名路径被重命名为account\u活动路径。我希望能够创建一个有效的链接,如127.0.0.1:3000/广告客户帐户/10/活动,而不必在路线中重复太多代码。RB有同样的问题,您是否找到了解决方案?您是否也可以发布您的erb/表单代码?谢谢,实际上,这不仅仅是表单代码。如果使用:as,则无法链接到嵌套路径。例如,link_to code将返回未定义的方法“广告客户账户活动路径”。这是因为当我使用:as=>accounts时,广告客户的命名路径被重命名为account\u活动路径。我希望能够创建一个有效的链接,如127.0.0.1:3000/广告客户帐户/10/活动,而不必在路由中重复太多代码。RB有同样的问题,您是否找到了解决方案?
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