Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 单表继承模型rails 3.1的嵌套路由_Ruby On Rails 3_Routes_Parameter Passing_Single Table Inheritance_Named Routing - Fatal编程技术网

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