Как использовать выбор коллекции для скрытого значения - PullRequest
1 голос
/ 21 апреля 2020

У меня есть таблица с именем субаренды, в которой есть эти столбцы, и есть таблица ссылок на таблицу свойств.

  create_table "sublet_posts", force: :cascade do |t|
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "property_id"
    t.index ["property_id"], name: "index_sublet_posts_on_property_id"

Таблица свойств

  create_table "properties", force: :cascade do |t|
    t.string "address"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false

  end

В форме субаренды view

  <div class="field">
    <%= collection_select(:sublet_post, :property_id, @properties, :id, :address, prompt: true) %>
    <%= form.hidden_field :property_id, value: params[:sublet_post][:property_id]  %>
  </div>

В представлении формы я использую адрес в качестве выбора, и если пользователь нажимает на адрес, я бы хотел, чтобы идентификатор сохранялся в значении скрытого значения: PROPERTY_ID. Я хотел бы сделать что-то похожее на код выше.

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете добавить id к обоим элементам и поймать событие change. html будет таким:

<div class="field">
  <%= collection_select(:sublet_post, :property_id, @properties, :id, :address, prompt: true, id: 'the_collection') %>
  <%= form.hidden_field :property_id, value: params[:sublet_post][:property_id], id: 'the_field'%>
</div>

И javascript, если вы используете jQuery:

$(document).on('change', '#the_collection', function(event) {
  var element = $(event.target);
  element.siblings('#the_field').val(element.val());
});

https://api.jquery.com/siblings/

...