2009-08-06 13 views
10

tôi khiến một phần như vậy:Rails người dân địa phương một phần không kiên trì khi gửi đến một phần khác như nó riêng địa phương

<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %> 

Vì vậy, bên trong _some_partial.html.erb tôi khiến hơn hai partials như vậy:

<% #foo.nil? #=> false %> 
<%= render :partial => 'widgets/another_partial', :locals => {:foo => foo} %> 
`<%= render :partial => 'widgets/another_partial_again', :locals => {:foo => foo} %>` 

Biến cục bộ foo hiển thị tốt trong some_partial.html.erb và ngay cả trong another_partial_again.html.erb. Tuy nhiên, biến foo không thể truy cập được trong another_partial.html.erb mặc dù tôi đã chuyển nó một cách rõ ràng trong lệnh gọi kết xuất.

gì đang xảy ra ở đây?

Cảm ơn sự giúp đỡ.

+0

Bạn có ý nghĩa gì với "không thể truy cập"? Liệu nó có ném một biến 'địa phương hay phương thức' không xác định hay là nó 'nil'? Bạn có thể hiển thị mã sử dụng 'foo' trên các phần phụ này không? – hsribei

+0

nó ném biến cục bộ không xác định – user94154

+0

mã đơn giản: <%= foo %> – user94154

Trả lời

3

Đã giải quyết. Hóa ra tôi cũng đang render cùng một phần từ bộ điều khiển mà không gửi các biến cục bộ thích hợp. Dù sao cũng cảm ơn!!!

+1

Tôi thực sự có cùng một vấn đề, và giải pháp của tôi giống hệt nhau - tôi đã tìm ra khi tôi nhìn thấy lỗi của bạn: P –

+0

ugh tôi quá! ha. Tôi thay đổi haml của mình từ: "- nếu myvar" thành "- nếu được định nghĩa? (Myvar) && myvar" – Chris

+0

tương tự ở đây, đã chuyển một phần trong AJAX, quên thay đổi biểu tượng – yoshyosh

41

Tôi gặp lỗi undefined local variable or method cũng xuất hiện cho tôi khi tôi hiển thị một phần với :locals được xác định.

Tuy nhiên, tôi gặp sự cố khác gây ra sự cố của mình, vì vậy tôi nghĩ tôi sẽ chia sẻ giải pháp của mình trong trường hợp nó giúp bất kỳ ai khác. (Trang này là kết quả đầu tiên khi tôi googled lỗi này sau khi tất cả)

Về cơ bản chỉ cần đảm bảo bạn sử dụng :partial => 'path/to/partial' trong cuộc gọi đến render.

I.e.

<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

KHÔNG thích tôi đã thực hiện:

<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

dễ dàng cho một newbie ray/ruby ​​như tôi bỏ lỡ.

+0

+1 Cuộc sống tiết kiệm, cảm ơn !! –

+6

+1 @ asgeo1 Lạ lùng rằng bạn cần ': một phần' để làm cho nó hoạt động, nhưng điều này thực sự hiệu quả! – iwasrobbed

+0

wow !!! Cảm ơn ... Tôi chỉ học Ruby và tôi hoàn toàn bối rối về lỗi này. Tôi ước tôi có thể tăng thêm điểm. – Nabheet

0

Bumped vào câu hỏi rất cũ này gây ra tôi phải đối mặt với cùng một vấn đề. Hóa ra rằng với Rails 4+ nếu bạn không sử dụng các bộ sưu tập hoặc bố trí một cách chính xác là:

# Instead of <%= render partial: "account", locals: { account: @buyer } %> 
<%= render "account", account: @buyer %> 

Như ghi nhận here.

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