отправка скрытых полей и / или MySQL отношений

0

У меня есть форма, представленная в rails, где пользователь вводит свой почтовый индекс. У меня есть таблица с тысячами и тысячами почтовых индексов вместе со своей долготой и широтой.

Есть ли способ настроить некоторые скрытые поля формы или в контроллере, вытащить long и lat из таблицы zipcode и сохранить их в профиле пользователя?

Или, возможно, установить отношения в базе данных, которые это делают?

Теги:
ruby-on-rails-3

1 ответ

1

У вас есть 2 варианта, поместив zip с долготой и широтой внутри пользовательской модели (будучи ненормализованной) или имея отношения "один-много" между пользователями и zip (нормализованный)

class User < ActiveRecord::Base
  belongs_to :zip
end

class Zip < ActiveRecord::Base
  has_many :users, :autosave => true
end

Тогда, на ваш взгляд, вы можете:

<% semantic_form_for @user do |form| %>
   standard form input stuff here.
   <%= text_field_tag "zip_text" %> # This puts a text field in the form that is not 
   #tied to the user. Thus when the form is submitted, if you examine the params hash you 
   #will see that the field zip_text is not within the user hash. Indeed it will be 
   #structured like this params = {:type => "commit", :id => 1, :zip_text => 96822, 
   #:users_attributes => {Users stuff in here}}
<% end %>

Затем в вашем контроллере вы можете:

@user = User.find(params[:id])
@zip = Zip.find(params[:zip_text])
@user.zip << @zip
@user.save

Для меня это более эффективно, чтобы сделать это таким образом, и чтобы zip-вход представлял собой простой текстовый ввод, затем просматривайте zip-поиск и последующую связь (выполняемую с <<), обрабатываемую в контроллере, особенно если вы собираетесь несколько тысяч почтовых индексов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню