2009-12-30 121 views
0

在一个玩具Rails应用程序中,我正在模拟一种情况,即您有多个盆,每个盆都包含一定数量的盆,您可以在盆之间进行事务处理。一笔交易可以从到任何一个罐子,然后去任何一个罐子。双关联模型的嵌套路由

下面是该机型的相关部分:

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 

这让我做在控制台上执行以下操作:

>> 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 

等。

我在设置路由时遇到问题。例如,我想:

  • /pots/123/from_transactions从锅123给所有交易的列表,
  • /pots/123/to_transactions/new给新的交易形式,与to_id为123

这是可能?任何帮助感谢收到等等等

回答

0

我的routes.rb现在包括以下:

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

这意味着,例如,对一个/pots/123/from_transactions/new请求被发送到transactions控制器,以及params[:from_id]被设定为123

0

我会说一个干净的管理方式是所有from_transactions相关的请求去from_transactions_controller和to_transactions相关去to_transactions_controller。但底层模型可能是相同的两个:

在路由文件可以按如下方式指定路线:

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

这是否帮助?

+0

虽然这会工作,我不喜欢有两个控制器会做几乎相同的事情的想法。我找到了更好的解决方案(请参阅我的答案) – grifaton