Как автоматически заселить местоположение в форму регистрации устройства с геолокации?(или эквивалентное решение) - PullRequest
0 голосов
/ 31 июля 2011

Я пытаюсь автоматически заполнить поле города в форме регистрации устройства, используя геолокацию. Я скопировал devise registrations_controller в свою папку контроллера и отредактировал новое действие следующим образом:

def new
resource = build_resource({})
respond_with_navigational(resource){ render_with_scope :new }
@geo = GeoLocation.find(request.remote_ip)
resource[:city] = @geo[:city]
end

Вот что у меня в форме:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>  
<%= devise_error_messages! %>  
<p><%= f.label :city, 'City' %><br />  
<%= f.text_field :city %></p>  

Честно говоря, я учил себя rails / ruby ​​всего месяц и почти уверен, что делаю легкую ошибку, но использование devise оказалось довольно запутанным, когда я пытаюсь его настроить ... Что лучше способ достичь этого с разработкой? Должен ли я даже редактировать контроллер регистрации? Спасибо за любую помощь.

EDIT Спасибо за ответ. Это имеет смысл, и я должен был понять. В любом случае, это позволило мне копнуть глубже. Теперь у меня есть форма с селектором коллекции, которая автоматически заполняется городом, откуда исходит IP. Вот код, который работал для меня:

Контроллер:

   def new
    @geo = GeoLocation.find(request.remote_ip)
    @city = City.find_by_name(@geo[:city])
    resource = build_resource(:city_id => @city[:id])
    respond_with_navigational(resource){ render_with_scope :new }
    end

Форма:

    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <p><%= f.label :city_id, 'City' %><br />
  <%= f.collection_select(:city_id, City.all, :id, :name, :prompt => true) %>

Теперь мой следующий шаг - выяснить, как разрешить пользователям добавлять города, отсутствующие в базе данных, и как все это проверить. Еще раз спасибо.

1 Ответ

1 голос
/ 31 июля 2011

Эта команда должна быть последней в действии контроллера:

respond_with_navigational(resource){ render_with_scope :new }

Любые изменения, внесенные в ресурс после этого, не будут отражены в отображаемом представлении.

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