[英]better way to write If statement with a lot of repeats in rails ruby
我有一個包含30個不同列的表,並且我正在嘗試編寫一種對包含值的每一列進行調用的方法。
例如。
def add_details
customer = Customer.find self.customer_id
if self.room1.present? && self.room2.present? && self.room3.present? && self.room4.present? && self.room5.present? && self.room6.present? && self.room7.present? && self.room8.present? && self.room9.present? && self.room10.present? && self.room11.present? && self.room12.present? && self.room13.present? && self.room14.present? && self.room15.present? && self.room16.present? && self.room17.present? && self.room18.present? && self.room19.present? && self.room20.present? && self.room21.present? && self.room22.present? && self.room23.present? && self.room24.present? && self.room25.present? && self.room26.present? && self.room27.present? && self.room28.present? && self.room29.present? && self.room30.present?
elsif self.room.present? && self.room2.present? && self.room3.present? && self.room4.present? && self.room5.present? && self.room6.present? && self.room7.present? && self.room8.present? && self.room9.present? && self.room10.present? && self.room11.present? && self.room12.present? && self.room13.present? && self.room14.present? && self.room15.present? && self.room16.present? && self.room17.present? && self.room18.present? && self.room19.present? && self.room20.present? && self.room21.present? && self.room22.present? && self.room23.present? && self.room24.present? && self.room25.present? && self.room26.present? && self.room27.present? && self.room28.present? && self.room29.present?
room = Room.find self.room
.....
room29 = ... end end
很多重復我自己,我知道ruby是動態的,所以應該有一種像for循環那樣增加數字的方法,它仍然可以工作。 我不知道有人能寫出更好的方法嗎
好吧,你可以做這樣的事情:
if (up_to_29 = (1..29).all?{|i| send("column#{i}").present? }) && column30.present?
# update_columns column1: ...
elsif up_to_29
# update_columns column1: ...
您可以使用一系列數字進行循環,並在每個數字上調用"column_#{i}"
。 all?
如果循環的每個迭代為true,則方法將返回true。 嘗試這樣的事情:
if (1..30).all?{|index| self.send("column#{index}")&.present? }
#...
elsif (1..29).all?{|index| self.send("column#{index}")&.present? }
#...
validate_needed_columns = Model.attribute_names
while validate_needed_columns.present? do
if validate_needed_columns.all?{ |c| Model[c].present? }
Model.update_columns(<Hash here>)
break
end
validate_needed_columns.pop
end
validate_needed_columns = {
column_name_1: value_to_update_1,
...
column_name_n: value_to_update_n
}
validate_needed_column_keys = validate_needed_columns.keys
while validate_needed_column_keys.present? do
if validate_needed_column_keys.all?{ |c| Model[c].present? }
Model.update_columns(<Use mapping to set value here>)
break
end
validate_needed_column_keys.pop
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.