Post.find.titles

0 views
Skip to first unread message

fl00r

unread,
Nov 19, 2008, 9:27:48 AM11/19/08
to RubyOnRails to russian
Я передаю в JS функцию заголовки постов (к примеру). Есть ли способ
организовать выборку в одну строчку?
Что-то вроде этого:
titles = Post.find(:all, :select => 'title').to_s
Это, конечно, не работает =)
Или мне все же единственный вариант - обработка циклом результат
запроса?

Max Lapshin

unread,
Nov 19, 2008, 9:38:36 AM11/19/08
to ror...@googlegroups.com
find(:all, :select => "title").map &:title

Timur Vafin

unread,
Nov 19, 2008, 9:40:56 AM11/19/08
to ror...@googlegroups.com
Max Lapshin пишет:

> find(:all, :select => "title").map &:title

Это дополнительный цикл.

Sergey Kojin

unread,
Nov 19, 2008, 9:44:02 AM11/19/08
to RubyOnRails to russian
Post.connection.select_values("SELECT title FROM posts")

Maxim Kulkin

unread,
Nov 19, 2008, 9:44:20 AM11/19/08
to ror...@googlegroups.com

Так надо

Maxim Kulkin

unread,
Nov 19, 2008, 9:50:52 AM11/19/08
to ror...@googlegroups.com
Я не понимаю вопроса: цикл _всегда_
будет. Вопрос только _где_ он будет.
Второе - не занимайтесь
преждевременной оптимизацией.

Timur Vafin

unread,
Nov 19, 2008, 9:51:44 AM11/19/08
to ror...@googlegroups.com
Maxim Kulkin пишет:

кому?

Oleg Andreev

unread,
Nov 19, 2008, 10:19:02 AM11/19/08
to ror...@googlegroups.com
Timur Vafin wrote:
> Maxim Kulkin пишет:

>> Timur Vafin wrote:
>>> Max Lapshin пишет:
>>>> find(:all, :select => "title").map &:title
>>> Это дополнительный цикл.
>> Так надо
> кому?

лесе
нк
а

fl00r

unread,
Nov 19, 2008, 11:01:48 AM11/19/08
to RubyOnRails to russian
Max Lapshin, Спасибо! то что надо
<% titles = Post.find(:all, :select => "title").map &:title %>
<%= titles.join(',') %>

Maxim Kulkin,
Я передаю в JS функцию значения в виде myFunc(arg1,arg2,arg3...) для
этого мне нужна выборка в виде ar1,arg2,arg3...
Я это обыно делал циклом вроде этого
Post.find(:all).each do |post|
titles += ','+post.title
end

Но так как я понимал, что это не рационально и мне стоит развиваться,
я и спросил как это делается.

Oleg Andreev

unread,
Nov 19, 2008, 11:08:00 AM11/19/08
to ror...@googlegroups.com

On 19.11.2008, at 19:01, fl00r wrote:

> Max Lapshin, Спасибо! то что надо
> <% titles = Post.find(:all, :select => "title").map &:title %>
> <%= titles.join(',') %>
>
> Maxim Kulkin,
> Я передаю в JS функцию значения в виде
> myFunc(arg1,arg2,arg3...) для
> этого мне нужна выборка в виде
> ar1,arg2,arg3...
> Я это обыно делал циклом вроде этого
> Post.find(:all).each do |post|
> titles += ','+post.title
> end
>
> Но так как я понимал, что это не
> рационально и мне стоит развиваться,
> я и спросил как это делается.


Развиваться все-таки стоит.

Вместо

Post.find(:all).each do |post|
titles += ','+post.title
end


нужно писать

@posts = Post.find(...)
@posts.map{|p|p.title.to_s.inspect}.join(',')


Max Lapshin

unread,
Nov 19, 2008, 11:10:11 AM11/19/08
to ror...@googlegroups.com
Не, я такое скорее сделал бы так:

render :update do |page|
   page << "myFunc(#{@posts.map {|post| post.title}.to_json});"
end


Что бы гарантировано заэскейпилось. Только в функцию прийдет тогда один параметр массив.

fl00r

unread,
Nov 19, 2008, 11:13:00 AM11/19/08
to RubyOnRails to russian
пошел читать rubybrain про map
Reply all
Reply to author
Forward
0 new messages