Отправка параметров в запрос GET в Ruby on Rails 2.3.x - PullRequest
0 голосов
/ 07 октября 2011

Я новичок в рельсах и сейчас использую 2.3.8. Я разрабатываю веб-сервис для приложения для iOS.

Поскольку я обычно являюсь клиентским разработчиком iPhone, мои знания о реализации на стороне сервера позорно минимальны.

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь передать некоторые параметры в запросе GET в действие index в одном из моих контроллеров. Это маршрутизируется с использованием значения по умолчанию

map.resources :dishes

где блюда - имя контроллера, созданного с помощью скаффолда.

Я хотел бы передать несколько параметров либо новому действию, либо индексу, что позволит мне отфильтровать возвращаемые объекты тарелки.

Индексный метод выглядит как

def index
    if(params[:latitude])
     @min = 0.5 - 1
      @max = 0.5 + 1
      @locations = Location.find(:all, :conditions => [":latitude > ? AND :latitude < ?", @min, @max])
        @dishes = new Array
        @locations.each do |loc| 

          @dishes = @dishes + loc.dishes

        end

        respond_to do |format|
          format.html # index.html.erb
          format.json {render :json => @dishes.to_json(:except => [ :user_id, :location_id , :like_id], :include => { :user => { :only => [:id, :name] } }  ) }

        end
    else
      @dishes = Dish.all

      respond_to do |format|
        format.html # index.html.erb
        format.json {render :json => @dishes.to_json(:except => [ :user_id, :location_id , :like_id], :include => { :user => { :only => [:id, :name] } }  ) }

      end
    end
end

В настоящее время я получаю следующую ошибку, когда передаю дополнительный параметр

ArgumentError in DishesController#index
wrong number of arguments (1 for 0)

Полная ошибка:

ArgumentError in DishesController#index
wrong number of arguments (1 for 0)
RAILS_ROOT: /Users/jon/Documents/Dev/Research/FF5_Rails_Test/FF5

Application Trace | Framework Trace | Full Trace
/Users/jon/Documents/Dev/Research/FF5_Rails_Test/FF5/app/controllers/dishes_controller.rb:9:in `new'
/Users/jon/Documents/Dev/Research/FF5_Rails_Test/FF5/app/controllers/dishes_controller.rb:9:in `index'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/base.rb:1331:in `send'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/base.rb:1331:in `perform_action_without_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/filters.rb:617:in `call_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/Library/Ruby/Gems/1.8/gems/activesupport-    2.3.8/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.8/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/rescue.rb:160:in `perform_action_without_flash'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/flash.rb:151:in `perform_action'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/base.rb:532:in `send'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/base.rb:532:in `process_without_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/filters.rb:606:in `process'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/base.rb:391:in `process'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/base.rb:386:in `call'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/routing/route_set.rb:438:in `call'
Request

Parameters:

{"format"=>"json",
 "latitude"=>"0.5"}
Show session dump

Response

Headers:

{"Content-Type"=>"",
 "Cache-Control"=>"no-cache"}

Я понимаю, что это немного противоречит RESTful-дизайну Rails, но я не мог найти другой способ сделать это.

Опять же, я новичок в разработке rails / web-сервисов, так что если у вас есть какие-либо советы, я бы их приветствовал.

Спасибо.

1 Ответ

2 голосов
/ 07 октября 2011

У вас есть

@dishes = new Array

, который, к сожалению, не является Ruby :) Существует три способа создания экземпляра Array

@dishes = Array.new
@dishes = []
@dishes = Array( nil )

, также обратите внимание на

/Users/jon/Documents/Dev/Research/FF5_Rails_Test/FF5/app/controllers/dishes_controller.rb:9:in 'new'
/Users/jon/Documents/Dev/Research/FF5_Rails_Test/FF5/app/controllers/dishes_controller.rb:9:in 'index'

, который сообщает вам, что ошибка произошла в new, а не в index

...