Я пытаюсь автоматически заполнить поле города в форме регистрации устройства, используя геолокацию. Я скопировал 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) %>
Теперь мой следующий шаг - выяснить, как разрешить пользователям добавлять города, отсутствующие в базе данных, и как все это проверить. Еще раз спасибо.