2012-10-15 26 views
14

thể trùng lặp:
Checking if a variable is defined in Rubyvang nếu biến được định nghĩa trong ruby ​​/ ERB

sử dụng phương pháp mẫu render Nghiêng, tôi vượt qua trong

#... t setup ... 
t.render(self, { :a => 'test', :b => 'again' }) 

trong template.erb tôi

<%= a %> 
<%= b %> 

nói rằng tôi xóa :b khỏi giá trị băm mà tôi chuyển vào mẫu. Kết xuất sẽ không thành công vì :b không được xác định.

trong PHP, tôi có thể đi:

<?= isset($foo) ? $foo : '' ?> 

là có cách nào sạch (trong ruby ​​/ ERB) để "echo nếu"?

tôi đã cố gắng <%= b.nil? ? b : '' %> nhưng đó rõ ràng là sai .. Bất kỳ trợ giúp sẽ được đánh giá

+1

Điều này có hữu ích không? http://stackoverflow.com/questions/288715/checking-if-a-variable-is-defined-in-ruby –

+0

hữu ích, nhưng tôi đoán câu hỏi của tôi là cụ thể cho các quy ước mẫu erb – tester

Trả lời

23

defined? là ruby ​​tương đương với isset().

<% defined?(a) ? a : 'some default' %> 
12

Nếu bạn muốn hiển thị gì nếu a không được định nghĩa:

<%= a if defined?(a) %> 

Ngoài ra những gì bạn có thể làm là thiết lập một số mặc định để a vào đầu một phần của bạn nếu nó không được định nghĩa. Bằng cách này, bạn yên tâm rằng a sẽ không gặp sự cố với bạn và bạn không phải kiểm tra xem nó có được xác định ở mọi nơi hay không. Tôi thích cách này một cách cá nhân.

THẬN TRỌNG: nếu bạn đặt a thành false khi bạn chuyển nó vào mẫu, mẫu sẽ được gán lại cho "" trong ví dụ của tôi.

<% a ||= "" %> 
#Then do some things with it. No crash! 
<%= a %> 
<%= a*10 %> 
<%= "Here's the variable a value: #{a}" %> 
+0

'<% = a nếu được xác định? a%> 'là tuyệt vời! cảm ơn bạn! – tester

+0

'nil?' Sẽ không an toàn, đúng không? – tester

+0

bạn không thể kiểm tra 'a.nil?' Nếu nó không được xác định, nó sẽ sụp đổ. Sử dụng 'được định nghĩa?' Để làm điều đó. Tuy nhiên, bạn có thể gán 'nil' vào' a' trong ví dụ thứ hai của tôi ở trên miễn là bạn chỉ cố gắng xuất nó. Nếu bạn muốn gọi các phương thức trên nó, nó sẽ sụp đổ ...! –

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