2013-06-03 40 views
5

Tôi đang cố gắng trả về một danh sách các tiêu đề của các đối tượng trong Rails, tuy nhiên tôi vẫn giữ toàn bộ đối tượng được trả về thay vì thuộc tính title.Lặp lại các mảng đối tượng và các thuộc tính trả về

loe là đối tượng có thuộc tính là danh sách các bài báo (có tên bài viết), mỗi bài viết là một đối tượng có thuộc tính được gọi là tiêu đề.

<%= loe.article.each { |x| print x.title } %> 

là cách tôi hiện đang cố thực hiện lặp lại, nhưng điều này trả về toàn bộ danh sách bài viết.

Trả lời

20

Sử dụng Array#map để gọi phương pháp title trên mỗi và tạo ra một mảng mới với kết quả:

loe.article.map(&:title) 

Trên đây là viết tắt cho

loe.article.map{ |o| o.title } 
1

loe.article.map {|x| x.title} có lẽ?

1
class LOE < ActiveRecord::Base 
    has_many :articles 
end 

class Article < ActiveRecord::Base 
    belongs_to :loe 
end 

loe.articles.select(:title).collect{|a| a.title} 

mapcollect là bí danh, và bạn có thể gọi select(:fieldname) trên AREL để chỉ trả về trường đó. Bạn vẫn nhận được các đối tượng, nhưng chúng chỉ đọc và được điền với bất kỳ lựa chọn nào được trả về, do đó, để có được một mảng các tiêu đề bạn cần thực hiện collect.

2

Sử dụng thẻ ERB như '<%=' có nghĩa là bạn đang yêu cầu ERB hiển thị kết quả của biểu thức đó (ở trên và ngoài thực tế là bạn đang gọi print bên trong khối). Và một cuộc gọi đến một phương pháp Enumerable như each sẽ trả về mảng ban đầu, đó là những gì bạn đang nhìn thấy.

Thay đổi thẻ thành <% (loại bỏ =) và bạn nên làm tốt.

+0

câu trả lời duy nhất cho câu hỏi –

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