2011-01-30 55 views
10

Nói rằng tôi có một mô hình gọi là "trái cây" và một truy vấn được trả lại tất cả những cái tên quả rõ rệt để @fruit:ActiveRecord mảng các đối tượng để dấu phẩy tách chuỗi

  • ruby ​​/ đối tượng: các thuộc tính trái cây! : fruit_name: cam attributes_cache: {}

  • ruby ​​/ đối tượng: các thuộc tính Fruit: fruit_name: táo attributes_cache: {}

  • ruby ​​/ đối tượng: các thuộc tính Fruit: fruit_name: đào attributes_cache: {}

Tôi hiểu (hơi) @fruit là một mảng tạo thành từ Mảng (đối tượng activerecord). Tôi đang cố gắng để có được tên trái cây trả về thành một chuỗi phân cách bằng dấu phẩy, như: "cam, táo, đào".

Nếu mảng được tạo thành từ chuỗi hoặc số (thay vì mảng), tôi biết tôi có thể sử dụng bản đồ w/.join (',') để thực hiện việc này. Tôi đang gặp rắc rối với cú pháp thêm cần thiết để tham khảo các mảng trong mảng (các lĩnh vực 'fruit_name' của mảng tại mỗi chỉ số mảng).

Tôi biết điều này sẽ làm việc, chỉ cần không chắc chắn làm thế nào để làm điều này như một sự lặp lại động:

@fruit_string = @fruit [0] .fruit_name + '' + @fruit [1] .fruit_name + ' ,' + @fruit [2] .fruit_name

Trả lời

29
@fruit_string = @fruit.map { |f| f.fruit_name }.join ',' 

Bây giờ, khi một khối bao gồm một phương thức gọi không có tham số, và cho hơi phức tạp lý do này, bạn có thể viết nó như

@fruit_string = @fruit.map(&:fruit_name).join ',' 


1. Toán tử đơn & biến procs thành khối và chặn thành procs. Nếu toán hạng là không, sau đó nó đầu tiên gọi to_proc, nếu nó có thể. (Và vâng, Symbol có to_proc.) Nó thậm chí còn phức tạp hơn thế, nhưng đó là lý do tại sao nó là một bổ sung tốt đẹp cho bản đồ.

+0

tôi sẽ sử dụng phiên bản tốc ký dưới đây –

16

Hoặc sử dụng viết tắt proc:

@fruit_string = @fruit.map(&:fruit_name).join(',') 
Các vấn đề liên quan