2011-11-04 25 views
6

Tôi đang cố gắng chọn một hình ảnh ngẫu nhiên từ thư mục con bên trong thư mục /app/assets/images của mình bằng cách sử dụng lệnh Dir.glob() và sau đó hiển thị hình ảnh đó với image_tag. Bằng cách nào đó tôi không thể làm cho nó hoạt động được.Sử dụng Dir.glob để liệt kê nội dung trong Rails 3.1?

Dưới đây là mã của tôi:

- @badges = Dir.glob("app/assets/images/badges/*") 
= image_tag @badges.sample 

nào tạo ra được lỗi sau:

ActionController::RoutingError (No route matches [GET] "/assets/app/assets/images/badges/produce.png"): 

Như bạn có thể nhìn thấy các đường ống dẫn tài sản được chèn một "/ tài sản" ở phía trước của thư mục. Alright Rails, tôi sẽ gặp anh ở đây. Vì vậy, tiếp theo, tôi thử xóa /app/assets khỏi đường dẫn truy vấn để làm cho nó hoạt động và nhận được kết quả sau:

- @badges = Dir.glob("images/badges/*") 
    = image_tag @badges.sample 

ActionController::RoutingError (No route matches [GET] "/assets"): 

Tôi đang làm gì sai ở đây? Cảm ơn trước sự giúp đỡ của bạn!

Trả lời

7

Dir.glob sẽ trả lại hình ảnh với một đường dẫn tương đối, vì vậy tập tin produce.png của bạn sẽ được trả lại như:

`app/assets/images/badges/produce.png` 

Tuy nhiên, bạn cần phải vượt qua chỉ là phần badges/produce.png để image_tag. Bạn cần phải loại bỏ những thứ trước đây:

= image_tag @badges.sample.gsub("app/assets/images/", "") 

Bạn có thể muốn dính này trong một helper thay vì:

def random_badge 
    badges = Dir.glob("app/assets/images/badges/*") 
    image_tag badges.sample.gsub("app/assets/images/", "") 
end 

và sau đó theo quan điểm của bạn:

= random_badge 
+0

Bạn là một nhà vô địch ! Cảm ơn! – thoughtpunch

+0

Hoạt động! Cảm ơn bạn – Dmitri

Các vấn đề liên quan