2015-06-05 20 views
15

Tôi đang sử dụng ruby ​​trên thanh ray và tôi muốn chỉ hiển thị từ đầu tiên của chuỗi.Hiển thị từ đầu tiên trong chuỗi bằng Ruby

Mã bị hỏng của tôi: <%= @user.name %> hiển thị Barack Obama.

Tôi muốn hiển thị nó Barack và ở nơi khác Obama.

Làm cách nào để chia nhỏ và hiển thị nó?

Trả lời

13

ngắn và dễ đọc:

name = "Obama Barack Hussein" 
puts "#{name.partition(" ").first} - #{name.partition(" ").last}" 
# Obama - Barack Hussein 

và nếu thứ tự của các lastname đầu tiên và được đảo ngược

name = "Barack Hussein Obama" 
puts "#{name.rpartition(" ").last} - #{name.rpartition(" ").first}" 
# Obama - Barack Hussein 
+0

Nice, không biết về 'Enumerable # partition'. Có lẽ ai đó (có thể là tôi!) Có thể điểm chuẩn để so sánh nó với 'String # split' cho trường hợp sử dụng này ... :) – mecampbellsoup

1

Cho phép nói rằng bạn có:

string = "Barack Obama" 
split_string = string.split() 

Trong tài liệu ruby:

Nếu mẫu được bỏ qua, giá trị của $; Được sử dụng. Nếu $; là nil (là giá trị mặc định), str được chia thành khoảng trắng như thể ‘đã được chỉ định.

sau khi sử dụng mà split_string[0] # ==> Barack ou split_string[1] # ==> Obama

20
> "this is ruby".split.first 
#=> "this" 
0

Bạn có thể đơn giản:

# `split` default is split by space `' '` 
<%= @user.name.split.first %> 

Tôi khuyên bạn nên further reading về decorators nơi bạn có thể xác định một phương pháp tương tự (hoặc bạn có thể dựa vào một helper cũng):

# It will give you 'Barack' 
def first_name 
    name.split.first 
end 

# It will give you 'Obama' 
def last_name 
    name.split.last 
end 
Các vấn đề liên quan