ROR запрашивает действие, чтобы получить диапазон предметов - PullRequest
1 голос
/ 28 февраля 2011

Как мне создать действие, которое принимает параметры для ограничения результатов поиска? Это было бы из моей модели сообщений

Posts_controller:

def getOneThrougTen</p> <p>params[firstNum] params[secondNum]</p> <p>return range of some sort?</p> <p>end</p> <p>

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

Мне не совсем ясно, чего вы хотите достичь, но если он отображает результаты поиска в виде кусков, я советую вам использовать will_paginate gem!

0 голосов
/ 01 марта 2011

Если вы ищете код типа пагинации, вы должны взглянуть на новые возможности, предоставляемые Arel и ActiveRecord в Rails 3. Это позволит вам сделать следующее:

@posts = Post.all.limit(myLimit).offset(myOffset)

или

@posts = Post.where(["user_id = ?",myUserId]).limit(myLimit).offset(myOffset).order("created_at desc")

и т. Д.и т.д. Очень мощные вещи.

0 голосов
/ 28 февраля 2011

Как только вы изучите основы того, как активная запись имитирует вызовы sql, передавая параметры, становится интуитивно понятным.Например, именно так вы можете создать коллекцию @posts из вашей модели Post на основе диапазона из определенного столбца, упорядочить результаты и ограничить возвращаемое число.

Вы можете просмотреть выходные данные скрипта / сервера, чтобы увидеть фактический SQL, чтобы помочь понять, что происходит и почему что-то идет не так, как планировалось.

@posts=Post.find(:all, :conditions=>["db_column_name between ? and ?", firstNum, secondNum],:order=>"db_column_name ASC", :limit=>10)

Для фактической отправки и чтения ваших параметров. В вашем контроллере вы можете читать параметры, отправляемые представлением, и назначать их переменным.Например, вы могли бы сделать.

 def getDateRangeandPassItOn
     firstNum=params[:firstNum] 
     ...

Фактическая отправка их из представления на ваш контроллер отличается в зависимости от того, используете ли вы полностью успокоительный контроллер, такой как сгенерированный в rails scaffoldind.Если все, что вам нужно, это отправить их в метод без отдыха, такой как «getDateRangeandPassItOn», вы бы сделали что-то подобное на ваш взгляд.

<% form_for ({:controller => 'name', :action => "getDateRangeandPassItOn"}) do f%>    
<%f.label :firstNum%> 
<%f.textField :firstNum%>
<%f.submit "submit"%>
<%end%> 
...