2012-04-10 85 views
0

方法调用这是我的函数的代码,其中我想提出一个呼叫new传递不同的参数,根据条件在Ruby中

def create_person_detail_from_registration(type, registration, registration_detail) 
    person_detail = type.constantize.new(
    :email  => registration.email_2, 
    :phone_1  => registration_detail.phone_1, 
    :phone_2  => registration_detail.phone_2, 
    :phone_3  => registration_detail.phone_3, 
    :phone_4  => registration_detail.phone_4, 
    :phone_5  => registration_detail.phone_5, 
    :phone_6  => registration_detail.phone_6, 
    :phone_7  => registration_detail.phone_7, 
    :address_1 => registration_detail.address_1, 
    :address_2 => registration_detail.address_2, 
    :city   => registration_detail.city, 
    :state  => registration_detail.state, 
    :postal_code => registration_detail.postal_code, 
    :country  => registration_detail.country 
) 
    return person_detail 
end 

现在的问题是根据什么价值type有,:email或者设置为registration.email_2registration.email。这样做的一种方法当然是编写整个代码两次,其中包含if-elsif声明。但我只想知道,如果有更聪明,更优雅的方式来做到这一点?

回答

0

只需将条件添加到值中即可。

:email  => (type==1 ? registration.email_2 : registration.email), 
+0

正是我在找的东西。谢谢! – 2012-04-10 07:49:20

+0

当您将参数传递给方法调用时,是否有可能在此行中使用显式if语句,因为代码中的这一点? – 2012-04-10 07:49:57

+0

您可以在调用'new'后始终设置'email'属性。 – 2012-04-10 07:50:36