Nestet ruting for modeller med dobbelts assosiasjoner

stemmer
0

I et leketøy Rails applikasjon, jeg modellering en situasjon der du har en rekke potter, som hver inneholder en mengde av noe, og du kan gjøre transaksjoner mellom pottene. En transaksjon kan komme fra hvilken som helst potten, og gå til noen potten.

Her er de relevante delene av modellene:

class Pot < ActiveRecord::Base
  has_many :to_transactions, :foreign_key => to_id, :class_name => Transaction
  has_many :from_transactions, :foreign_key => from_id, :class_name => Transaction
end

class Transaction < ActiveRecord::Base
  belongs_to :to_pot, :class_name => Pot, :foreign_key => to_id
  belongs_to :from_pot, :class_name => Pot, :foreign_key => from_id
end

Dette tillater meg å gjøre følgende på konsollen:

>> p = Pot.find(123)
>> p.from_transactions
=> # returns array of transactions from pot 123
>> t = p.to_transactions.new
=> # t is a new transaction with to_id set to 123

og så videre.

Jeg har et problem å sette opp routing. For eksempel vil jeg gjerne:

  • /pots/123/from_transactions å gi en oversikt over alle transaksjoner fra potten 123,
  • /pots/123/to_transactions/newå gi den nye transaksjonen form, med to_idsatt til 123

Er dette mulig? Alle hjelpe takknemlig mottatt etc etc.

Publisert på 30/12/2009 klokken 00:12
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Jeg vil si en ren måte å håndtere er at alle from_transactions relatert forespørsel gå til from_transactions_controller og to_transactions relatert gå til to_transactions_controller. Men den underliggende modellen kan være lik for begge:

I rute fil kan du angi rutene som følger:

'pots/:id/to_transactions/new', :controller => 'to_transactions', :action => 'new' 
'pots/:id/from_transactions/', :controller => 'from_transactions', :action => 'index'

Hjelper det?

Svarte 30/12/2009 kl. 06:53
kilden bruker

stemmer
0

Min routes.rb inkluderer nå følgende:

map.resources :transactions, :path_prefix => '/pots/:from_id', :as => :from_transactions
map.resources :transactions, :path_prefix => '/pots/:to_id', :as => :to_transactions

Dette betyr for eksempel at en anmodning om å /pots/123/from_transactions/newblir sendt til transactionsstyreenheten, og params[:from_id]er satt til 123.

Svarte 01/01/2010 kl. 17:11
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more