2013-08-05 51 views
0

我见过http://rails-bestpractices.com/posts/15-the-law-of-demeter代表团,我喜欢这个,我想像下面那样自定义。委托人不为我工作?

案例1:

class Application < ActiveRecord::Base 
     belongs_to :user 
     delegate :name, :to => :user 

     has_one :repair, :dependent => :destroy 
     delegate :estimated_amount, :to => :repair 

     has_one :dealership, :through => :booking 
    end 

    class User < ActiveRecord::Base 
    def name 
    return some value 
    end 
    end 

我呼吁Application.first.user_name => undefined method `user_name' for #<Application:0xb186bf8>

案例2:我叫Application.first.repair_estimated_amount: => undefined method `'repair_estimated_amount' for #<Application:0xb186bf8>

情形3:我叫Application.first.dealership_name: => undefined method `' for #<Application:0xb186bf8>

任何一个可以建议如何使用委托与has_one关系?

由于提前 普拉萨德

回答

1

您没有使用前缀选项,所以你应该只调用该方法无需前缀。

# model.rb 
delegate :estimated_amount, :to => :repair 

# somewhere else 
Application.first.estimated_amount #=> works 
Application.first.report_estimated_amount #=> exception! 

但是,如果你通过前缀选项:

# model.rb 
delegate :estimated_amount, :to => :repair, :prefix => true 

# somewhere else 
Application.first.estimated_amount #=> exception 
Application.first.report_estimated_amount #=> works! 

delegate()

看到的文档