1

Ich habe Schwierigkeiten, Parameter an meinen Controller zu übergeben. Ich habe in meiner Modelldatei ein Vererbungsmodell für einzelne Tabellen erstellt.Wie kann ich Parameter an verschachtelte Ressourcen für die Vererbung einzelner Tabellen in Ruby on Rails übergeben?

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

gefasst ich meine Routen-Tabelle mit verschachtelten Ressourcen bis

resources :advertiser_accounts do 
    resources :campaigns 
end 

Ich möchte den aktuellen account_id passieren können (eine account_id von einem meiner zwei Subklassen von Konto) zu meiner Kampagne Controller-Datei . Eine URL, die ich verwenden würde, ist http://127.0.0.1:3000/advertiser_accounts/1/campaigns Da meine Ressource für die URL Advertiser_Accounts und keine Konten ist, kann ich den Parameter: account_id nicht abrufen.

class CampaignsController < ApplicationController 
def index 
    @account = current_user.accounts.find_by_id(params[:account_id]) 
end 
end 

Gibt es eine Verknüpfung, um die aktuelle Ressource oder die ID zu erhalten? Übertrage ich Parameter richtig? Es scheint verwirrend, viele find_by_id im Controller zu nennen. Jede Hilfe wird geschätzt.

bearbeiten Mögliche Lösung: Eine der Lösungen, die ich dachte, war eine Art in meinen Routen festlegen und dann in meinem Controller würde ich Fall Anweisung dann params erhalten [: advertiser_account_id] aber das scheint sehr mühsam und chaotisch . Vor allem, wenn ich in jeder Aktion eine Liste von Fallanweisungen kopieren und einfügen muss.

routes.rb

resources :advertiser_accounts, :type => "AdvertiserAccounts" do 
    resources :campaigns 
end 

campaigns_controller.rb

def index 
    case params[:type] 
    when "AdvertiserAccounts" 
      @account = current_user.accounts.find_by_id(params[:advertiser_account_id]) 
    when "PublisherAccounts" 
      @account = current_user.accounts.find_by_id(params[:publisher_account_id]) 
    end 
end 
+1

Was 'routes' Show nicht Rake, dh wenn i Rake Routen laufen i sehen: http://cl.ly/1M2t2B1i1g290S2E353N als einer meiner Einträge, und ich weiß ': ID' ist die ID-Nummer –

+0

Oh. Vielen Dank! Ich denke mein Problem hat mit meiner Routes-Datei zu tun. Meine Strecken zeigen, publisher_account_campaign GET /publisher_accounts/:publisher_account_id/campaigns/:id(.:format) Ich verwende folgendes meine Routen in meinem routes.rb Ressourcen zu generieren: advertiser_accounts tun Ressourcen: Kampagnen Ende Wie kann ich meine: publisher_account_id als übergeordnetes Element verwenden: account_id? Meine STI-Account-Tabelle hat keine Spalten namens: publisher_account_id – user1157352

+0

Danke! Ich habe hinzugefügt: as => "accounts" in meinen Routen und ich denke, es hat das Problem gelöst – user1157352

Antwort

1

dies ausprobieren:

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

, die Sie sollten geben

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

Schnelle Frage. Wie kann ich Folgendes verwenden: as, aber ohne den angegebenen Pfad von advertiser_accounts zu Accounts zu ändern? Gerade jetzt, wenn ich folgendes benutze: as => "accounts" wird meine Route zu "account_campaigns GET /advertiser_accounts/:account_id/campaigns(.:format) campaigns # index". Wenn ich also ein neues Element mit form_for erstelle, würde mein advertiser_accounts_path nicht existieren, seit er umbenannt wurde.Dies würde mir "undefined lokale Variable oder Methode" advertiser_accounts_path '" – user1157352

+0

Ya, ich bin mir nicht sicher, es gibt eine einfache Antwort darauf. Und ich bin kein Single Table Vererbungsexperte, aber mit meiner Erfahrung glaube ich, dass Sie in der Lage sein sollten, den Account Class Record mit der: advertiser_account_id aufzurufen, ohne '' as' zu verwenden, oder? –

0

Sie können mit "wird" Methode in Ihrem Controller versuchen. In Ihrem privaten Methode, wo Sie für die account_id suchen würden Sie haben:

@account = Account.find(params[:account_id]).becomes Account 
Verwandte Themen