Ruby on rails 如何将委托与try-in-Rails一起使用
我在我的申请中有一个关系,其中一个客户的地址属于一个省 现在我想把省名放在客户机数据附近,所以我在client.rb中创建了一个方法:Ruby on rails 如何将委托与try-in-Rails一起使用,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在我的申请中有一个关系,其中一个客户的地址属于一个省 现在我想把省名放在客户机数据附近,所以我在client.rb中创建了一个方法: def province_name try(:address).try(:province).try(:name) end 问题是不是每个客户机都有加入地址。这种方法可行,但看起来很难看。是否可以使用委托方法以更好的方式编写?我们以前也取得了类似的成果: #app/models/client.rb class Client < ActiveRecor
def province_name
try(:address).try(:province).try(:name)
end
问题是不是每个客户机都有加入地址。这种方法可行,但看起来很难看。是否可以使用委托方法以更好的方式编写?我们以前也取得了类似的成果:
#app/models/client.rb
class Client < ActiveRecord::Base
has_one :address
end
#app/models/address.rb
class Address < ActiveRecord::Base
belongs_to :province
delegate :name, to: :province
end
#app/models/province.rb
class Province < ActiveRecord::Base
has_many :addresses
def name
self[:name] ||= province
end
def province
self[:province] ||= address
end
end
您可能希望重构上述代码,但它非常适合我们:
#app/models/user.rb
class User < ActiveRecord::Base
has_one :profile, inverse_of :user
delegate :name, to: :profile
end
#app/models/profile.rb
class Profile < ActiveRecord::Base
belongs_to :user, inverse_of :profile
def name
self[:name] ||= user.email
end
end
我觉得不错。丑陋隐藏在一个方法中。在地址中,你可以使用delegate:name,to::province,在通过地址访问它。name和伙计们,我使用了两个委托:delegate:province\u name,to::address,to::address.rb中的allow\u nil:true和delegate:name,to::province,prefix:true,一切正常。你怎么认为?我喜欢这个解决方案。