2011-01-12 26 views
21

Trong điều khiển của tôi, tôi có mã đơn giản sau đây:Sử dụng struct trong Ruby on Rails cho nhiệm vụ thường xuyên động (Lỗi Cú pháp)

def index 
    @dashboard_items = [] 
    DashItem = Struct.new(:name, :amount, :moderated) # Error is here 

    [:page, :post].each do |c| 
    obj = c.to_s.capitalize.constantize 
    @dashboard_items << DashItem.new(c.to_s, obj.count, obj.count_moderated) 
    end 
end 

Nhưng của Ruby cung cấp cho các lỗi sau:

dynamic constant assignment (SyntaxError)

trên dòng được đánh dấu ở trên.

Điều gì, AFAIK, có nghĩa là hằng số DashItem đã được xác định. Điều này có đúng không? Và phải làm gì với nó?

+2

lưu ý phụ: mảng trống + mỗi + chắp thêm = bản đồ – tokland

+0

bản sao có thể có của [Phân bổ liên tục động] (http://stackoverflow.com/questions/6712298/dynamic-constant-assignment) –

Trả lời

45

Lỗi giải thích vấn đề là gì - bạn có một hằng số được chỉ định trong ngữ cảnh quá động - tức là bên trong phương thức chỉ mục.

Giải pháp là để xác định nó ở bên ngoài:

DashItem = Struct.new(:name, :amount, :moderated) 
def index 
    @dashboard_items = [] 
    ... 
+6

Không thực sự là lỗi tự giải thích. .. – Mirko

11

Nếu bạn muốn giữ lại toàn bộ sự việc gọn gàng bên trong phương pháp chỉ số của bạn, bạn có thể làm điều này:

def index 
    @dashboard_items = [] 
    # Set the name of your struct class as the first argument 
    Struct.new('DashItem', :name, :amount, :moderated) 
    ... 
    # Then when you want to create an instance of your structure 
    # you can access your class within the Struct class 
    @dashboard_items << Struct::DashItem.new(c.to_s, obj.count, obj.moderated) 
end 

Như Gunn nói, bạn chỉ không thể chỉ định rõ ràng một hằng số trong một phương thức như vậy ...

Giải pháp này được giải thích thêm trong tài liệu ruby ​​here, ví dụ thứ hai trên trang.

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