Làm cách nào để thêm điều kiện băm vào một mảng *args
trong Rails? Tôi không muốn dẫm lên giá trị ban đầu nếu có.Làm cách nào để thêm băm vào * args?
Ví dụ, tôi có một phương pháp mà nhận được một mảng:
def foo(*args)
# I want to insert {style: 'bar'} into args but only if !style.present?
bar(*args) # do some other stuff
end
Tôi đã bắt đầu sử dụng extract_options và phương pháp reverse_merge cung cấp bởi ray:
def foo(*args)
options = args.extract_options! # remove the option hashes
options.reverse_merge! {style: 'bar'} # modify them
args << options # put them back into the array
bar(*args) # do some other stuff
end
Nó hoạt động nhưng dường như tiết và không phải là rất ruby-ish. Tôi cảm thấy như tôi đã bỏ lỡ một cái gì đó.
Có lý do nào bạn cần đặt lại trong danh sách 'args' không? Tôi tin rằng hai cái đầu tiên là phổ biến trong nguồn Rails. –
Câu hỏi hay. Có, hàm 'foo' chuyển args vào một hàm khác. Tôi sẽ chỉnh sửa câu hỏi để cho thấy điều đó. Tôi đang viết một lớp FormBuilder, rất nhiều người trợ giúp gọi những người trợ giúp khác. – IAmNaN