2013-02-08 3 views
0

Это простой вопрос, но мне трудно найти ответ. У меня есть поле выбора в моей форме, и я хочу построить массив опций в зависимости от количества записей запросов.Массив выбора полей выбора полей в Rails. Рельсы way

Я получаю мой счет, как это в моем контроллере:

@num_pages= Page.where(:site_id => @siteid).count 

Я хочу, чтобы мои параметры массива просто как {[ "1", 1], [ "2", 2],. ..} вплоть до @num_pages.

Теперь я знаю я могу просто сделать петлю и построить этот массив, но я хочу знать, если есть более «рельсы» способ сделать это. Так что мой выбор кода все еще может быть столь же простым, как это:

<%= select_tag(:nav_order, options_for_select(@num_pages)) %> 

... без использования петель и массива выталкивает и что у вас.

UPDATE

Благодаря ответам мой код теперь работает, как это. Однако я решил сохранить отображение в представлении вместо контроллера.

<% options_array = ([email protected]_count).to_a.collect{|p| ["#{p}", p]} %> 
<%= select_tag(:nav_order, options_for_select(options_array)) %> 

ответ

1

Построить массив в контроллере?

num = Page.where(:site_id => @siteid).count 
@num_pages = (1..num).to_a.collect{|p| ["#{p}", p]} 
2

Если я правильно понял ваш вопрос, я думаю, что это следует сделать трюк:

Array.new(@num_pages){ |i| [(i+1).to_s, i+1] } 

Пример с номером и выходом:

irb(main):001:0> Array.new(5){ |i| [(i+1).to_s, i+1] } 
=> [["1", 1], ["2", 2], ["3", 3], ["4", 4], ["5", 5]] 

Не уверен, если это будет «рельсы», но я думаю, что это достаточно просто :)