Как пользователь может обновить значения таблицы другой модели, используя форму? - PullRequest
0 голосов
/ 10 января 2019

У меня есть пользователь, который содержит свои адреса. Теперь у меня есть другая таблица, называемая адресом поиска, которая содержит адрес_поиска поиска.

Это должно быть отношение один к одному, когда пользователь может создать только один адрес поиска в таблице адресов поиска.

Я хочу, чтобы пользователь мог отправить форму и создать в таблице поиска адресов адрес для поиска. После этого я хочу вызвать широту и долготу этого search_address (я использую гем геокодера).

Это код, который у меня есть:

Схема:

  create_table "users", force: :cascade do |t|
    t.string   "address"
    t.float    "latitude"
    t.float    "longitude"
  end
  create_table "search_addresses", force: :cascade do |t|
    t.datetime "created_at",       null: false
    t.datetime "updated_at",       null: false
    t.string   "search_address"
    t.float    "search_latitude"
    t.float    "search_longitude"
  end

Модель пользователя:

class User < ActiveRecord::Base

geocoded_by :address
after_validation :geocode

end

Поиск модели адреса:

class SearchAddress < ActiveRecord::Base
  belongs_to :user

  geocoded_by :search_address, :latitude => :search_latitude, :longitude => :search_longitude

end

Мое текущее представление (я основал этот ответ на другом ответе из стека, но он не работает):

<%= semantic_form_for @users do |f| %>

<%= fields_for @user.searchaddresses do |g| %>

    <div class="field">
      <%= g.label :search_address, 'Search Address' %>
      <br/>
      <%= g.text_field :search_address, :class => "form-control" %>
    </div>

  <%= f.submit 'Save Search Address' %>
  <% end %>
  <% end %>

Кроме того, мой предполагаемый вид будет отображать что-то вроде этого:

<%= @user.searchaddress.latitude %>
<%= @user.searchaddress.longitude %>

Основываясь на этой информации, что мне делать с формой, чтобы пользователь мог добавить в один поисковый адрес, а затем в другом представлении отобразить широту и долготу этого поискового адреса?

1 Ответ

0 голосов
/ 10 января 2019

1 => Использовать Nested Attributes для пользователя

class User < ActiveRecord::Base
  has_many : search_addresses, dependent: :destroy
  geocoded_by :address
  after_validation :geocode
  accepts_nested_attributes_for :search_addresses
end

2 => Исправить опечатку

<%= semantic_form_for @user do |f| %>

  <%= fields_for @user.search_addresses do |g| %>
    <div class="field">
      <%= g.label :search_address, 'Search Address' %>
      <br/>
      <%= g.text_field :search_address, :class => "form-control" %>
    </div>
  <% end %>

  <%= f.submit 'Save Search Address' %>
<% end %>

3 => users_controller.rb

def update
  #fetch user to be updated along with search_addresses
  @user.update(update_user_params)
  #after update
end

private
  def update_user_params
    params.require(:user).permit(search_addresses_attributes: [:search_address])
  end

Ссылки: - Вложенные атрибуты Ruby on Rails ,

Вложенные атрибуты активной записи

...