2013-07-16 66 views
1

创建方法,我想写这会像这样一个传递块到红宝石

def create_new_car(salon) 
    Car.create name: salon.offer.name, description: salon.offer.description, photo: salon.offer.photo, dealer_id: salon.dealer_id 

end 

的方法,但我想保持干燥。有没有办法通过这些属性,我不知道,通过传递块迭代通过属性数组?

回答

1

您可以将块传递给create

def create_new_car(salon) 
    Car.create do |car| 
     car.name = salon.offer.name 
     car.description = salon.offer.description 
     car.photo = salon.offer.photo 
     car.dealer_id = salon.dealer_id 
    end 
end 

您还可以设置一些属性作为第一个参数,然后通过一个块:

Car.create(name: salon.offer.name) do |car| 
     car.description = salon.offer.description 
     #... 
    end 

你可以实现你想要内的任何逻辑该块分配Car属性,如下所示:

attributes = ["name", "description", "photo", "dealer_id"] 
    Car.create do |car| 
     attributes.each { |a| car.send("#{a}=", salon.offer.send(a)) 
    end 
+0

你的答案的这个纬度部分是相当多我需要什么,只有dealer_id不应该是属性数组中,因为它不是从报价,但取自沙龙。无论如何,thx,这是很好的领先 – Leo