Проблемы с доступом к параметрам Ruby на RhoMobile

Я новичок в Ruby, так что извините за невежество. Я действительно не знал, как сформулировать этот вопрос, так что это также может быть одной из причин, по которой я не нашел ответа в Интернете.

Я работаю с Rho Elements и пытаюсь передать что-то с одной страницы на другую. Я добился хорошего прогресса, но столкнулся с чем-то, чего не понимаю. Я могу пройти через идентификатор вот так

<input type="hidden" name="id" value="<%= @orderdetails.object %>"/>

Затем я беру идентификатор (делаю это только сейчас, чтобы убедиться, что я действительно получил идентификатор)

@id = @params['id']

затем перенаправить на другую страницу

redirect url_for(:action => :newpage, :id => @id).

Здесь начинаются мои проблемы. Когда я отлаживаю приложение, я обхожу перенаправление и ввожу: newpage

def newpage
    @orderdetails = OrderDetails.find(@params['id'])
    if @orderdetails
      render :action => :newpage, :back => url_for(:action => :index)
    else
      redirect :action => :index
    end
end

Когда-то здесь я проверяю

@params['id] 

и вот что отображается.

@params {"id"=>"{131113212443313.17}"}  
"id"    ""  

@params {"id"=>"{131113212443313.17}"} отображается eclipse, и когда я перехожу к переменной "id", отображается "".

Почему я могу видеть идентификатор, который я хочу использовать для получения только что созданных сведений о заказе, но фактическая переменная также пуста?

** РЕДАКТИРОВАТЬ: это информация, которую я пытаюсь передать.

@params {"id"=>"131113212443313.17", "next"=>"asleftnext", "orderdetails"=>
{"AsFoundMeterRead"=>"", "AsFoundImage"=>""}}   
"id"    "131113212443313.17"    
"next"  "asleftnext"    
"orderdetails"  {"AsFoundMeterRead"=>"","AsFoundImage"=>""} 

person Chris    schedule 26.02.2013    source источник


Ответы (2)


Используйте params в контроллере, а не @params. Также каноническая форма доступа к ключам — params[:id].

person harm    schedule 26.02.2013
comment
Дополнительная информация: хэш params на самом деле является экземпляром ActiveSupport::HashWithIndifferentAccess, который позволяет вам получить доступ к хешу с помощью символа или ключа String. - person MrDanA; 27.02.2013
comment
@harm Спасибо, но я все еще получаю ноль. Я собираюсь быстро обновить некоторые дополнительные сведения, которые могут быть полезны. - person Chris; 27.02.2013

Как и в предыдущем ответе, вы таким образом получаете доступ к параметрам в контроллере.

@id = params[:id]

Кроме того, если вы используете Rails 3 или более позднюю версию, вы можете захотеть использовать новый способ URL, менее подробный, чтобы его было легче читать.

newpage_controllername_url(:id => @id)

вы также можете запросить путь с помощью этого метода.

Если вы не знаете, правильно ли вы передаете параметры, вы можете отобразить содержимое, используя

params.inspect

Вы можете просмотреть содержимое любого объекта с помощью inspect

person ArtDlrt    schedule 26.02.2013
comment
Спасибо, я использую eclipse для отладки приложения, и я вижу, что значение действительно передается через :id => @id, но у меня возникли проблемы с получением его из параметров. - person Chris; 27.02.2013
comment
Я немного смущен вашим потоком, но почему бы вам не попробовать использовать сеансы, если вы хотите передавать значения из одного представления в другое. Если вы уже изменили свой @params на params, должно быть что-то не так в потоке перенаправлений. Я тестировал в своем приложении @params.inspect, и оно пустое. Вы можете получить доступ к сеансу, просто вызвав метод и добавив ключ session[:id] = @id, но если у вас нет конфигурации для использования хранилища сеансов БД, сеанс будет сохранен в файле cookie, поэтому он будет ограничен размером файлов cookie, и вы не должны хранить конфиденциальные данные там - person ArtDlrt; 27.02.2013
comment
Я использую фреймворк Rhodes, который не поддерживает сеансы. Я думаю, что мне нужно больше узнать о framework/ruby, прежде чем я смогу начать понимать, что происходит. Спасибо за ответ, но я думаю, что с моей стороны потребуется больше копать. - person Chris; 27.02.2013
comment
Еще немного обновленной информации: я обнаружил, что когда я пытаюсь получить доступ к :id из параметров, он добавляет многоточие, поэтому мой :id на самом деле {123456789}, а не 123456789. Я предполагаю, что это означает, что это массив и мне нужно получить доступ как к массиву. Это было бы правильно? РЕДАКТИРОВАТЬ: Это хэш, моя ошибка. - person Chris; 27.02.2013