Получить два случайных элемента из модели RoR - PullRequest
4 голосов
/ 01 марта 2009

Я пытаюсь использовать RoR для чего-то простого, и у меня возникают проблемы с подбором основ. Мой ближайший опыт - ASP.NET MVC, но я нахожу, что все учебные пособия по RoR сосредоточены на том, в чем действительно хорош rails (материал для скаффолда), а не на том, как делать свои собственные действия и заставлять их делать что-то с параметрами и т.д. тривиально в ASP.NET MVC).

В данный момент я пытаюсь получить два случайных элемента из модели.

Я думаю, что я имею дело с какой-то коллекцией ActiveRecord?

Я читал, что где-то в коллекциях / массивах есть метод .rand, хотя в других местах предполагается, что rand - это просто метод получения случайного числа до определенного числа. Я даже не могу заставить работать следующий код:

def index
    @items = Array.new(Item[0], Item[0])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @domain }
    end
end

Все, что может помочь с этим и в идеале помочь с дальнейшим исправлением из ASP.NET MVC в RoR, будет очень признательно.

Ответы [ 5 ]

6 голосов
/ 01 марта 2009

Чтобы получить два случайных элемента из модели ActiveRecord:

@things = Thing.all(:order => 'RANDOM()', :limit => 2)
5 голосов
/ 01 марта 2009

Если вы хотите 2 случайных элемента из базы данных, спросите в базе данных 2 случайных элемента:

@items = Item.find(:all, :limit => 2, :order => "RANDOM()")

Нет смысла загружать все Item с вашей системы, если вы используете только 2, это пустая трата.

Если у вас do уже есть массив из другого места, из которого вам нужно получить случайные значения, то Rails добавляет метод rand в класс Array:

@items = [my_arr.rand, my_arr.rand]

Я не знаю, что вы пытались сделать с Item[0], но в Rails это ничего не значит.

3 голосов
/ 01 марта 2009

Как выглядит ваша модель? Я не уверен, что вы пытаетесь сделать с Item [0] там. Для рандомизации вашего массива вы можете сделать что-то вроде этого:

@items = ["item1", "item2", "item3"].sort_by {rand}

тогда вы можете просто сделать @items [0] и @items [1], чтобы получить 2 элемента рандомизированного массива.

Что касается параметров, вы можете получить любые переменные формы или запросить параметры из строки запроса, используя хэш параметров:

params[:user]

Имя символа - это просто имя поля формы или параметра в строке запроса.

Контроллеры Rails обычно содержат одно или несколько повторяющихся действий (индексировать, показывать, создавать новые, создавать, удалять, редактировать, обновлять), если вы перенаправили его как ресурс, но при добавлении собственных действий нужно просто добавить новый метод ваш контроллер, направляя это действие в routs.rb и создавая представление с именем этого действия.

2 голосов
/ 14 января 2011

В базе данных Mysql используйте RAND (), а не RANDOM ()

@items = Item.find(:all, :limit => 2, :order => "RAND()")
2 голосов
/ 01 марта 2009

Дополнительная информация о вашей модели и о том, что вы пытаетесь выполнить, поможет, но если вы пытаетесь извлечь случайную запись из базы данных, такой как sqlite, вы можете сделать что-то вроде:

@item = Items.find(:first, :order => 'RANDOM()')

Где Items - класс вашей модели. 'RANDOM()' - это просто строка, передаваемая базе данных, чтобы указать, как сортировать, поэтому вам нужно будет настроить ее в соответствии с используемой базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...