2011-09-01 28 views
5

Tôi có đoạn mã mà tôi đang cố sử dụng biến cho tên lớp trong HAML. Dưới đây là:Sử dụng biến ruby ​​cho tên lớp trong HAML

 - data_table(@installation_requests, nil, {:placeholder => ''}) do |installation_request, css_class| 
      %tr{:class => css_class} 

Tôi không thể thấy bất cứ điều gì sai với nó, RubyMine IDE không chọn lỗi, nó nghĩ rằng đó là sử dụng hợp pháp của biến. Tôi nhận được lỗi sau:

odd number of arguments for Hash 

Có thể cho tôi biết điều gì sai với mã ở trên không?

+0

Bạn nhận được lỗi khi bạn sử dụng một chuỗi chữ thay cho biến? –

+0

Thử gọi 'to_s' trên' css_class'. – twe4ked

+0

Yep cùng một lỗi. Khi tôi chỉ sử dụng chuỗi hardcoded thay vì biến nó hoạt động .. – alexs333

Trả lời

0

Hash thực sự có thể vượt qua một mảng được truyền vào một chuỗi các khóa và giá trị.

Đối với ví dụ:

Hash["a", "apple", "b", "boy"]  #=> {"a"=>"apple", "b"=>"boy"} 

Nếu bạn vượt qua một số lẻ của đối số được splat vào cặp khóa/giá trị ...

Hash["a", "apple", "b", "boy", "c"] #=> odd number of arguments for Hash 

Vì vậy, tôi khá chắc chắn điều này xảy ra ở đâu đó bên trong phương thức data_table. Vì vậy, hãy kiểm tra nếu một mảng đang được splat vào Hash một nơi nào đó trong chuỗi các cuộc gọi chức năng!

+0

Nếu điều này xảy ra, sau đó gọi css_class.class sẽ trả về 'Array', nhưng nó trả về 'Chuỗi' ... – alexs333

+0

Phiên bản Ruby và HAML nào bạn đang sử dụng ? Xem vấn đề này: https://github.com/nex3/haml/issues/388 – dexter

6

gì nếu bạn cố gắng:

- data_table(@installation_requests, nil, {:placeholder => ''}) do |installation_request, css_class| 
    %tr{:class => "#{css_class}"} 

hoặc nếu bạn đang lưu quan điểm của bạn như view.html.haml:

- data_table(@installation_requests, nil, {:placeholder => ''}) do |installation_request, css_class| 
    <tr class="#{css_class}"> 
    ....stuff.... 
    </tr> 
+0

Công trình gợi ý đầu tiên, cảm ơn bạn! – RyanB

+0

OP: có lẽ bạn nên chấp nhận câu trả lời? –

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