Я использую жемчужину nested_form_fields - с привязкой options_for_select. «Выбранная опция» не сохраняется. Сама цепочка работает. Драгоценный камень написан в javascript, поэтому может возникнуть основной конфликт между жемчужиной и цепочкой jQuery. Надеюсь, однако, я упускаю из виду что-то еще.nested_form_fields gem, options_for_select with jQuery chaining not working rails
Модель - user.rb:
has_many :state_registrations, inverse_of: :user,
dependent: :destroy
accepts_nested_attributes_for :state_registrations
Модель - state_registrations.rb:
belongs_to :user, inverse_of: :state_registrations
View - пользователи/_form.html.erb:
<div class="col-sm-12 col-md-12 form-group">
<%= f.nested_fields_for :state_registrations, :html => { :multipart => true },
wrapper_tag: :div do |state_registration_fields| %>
<div class="row" >
<div class="col-sm-1 col-md-1"></div>
<div class="col-sm-3 col-md-3">
<%= state_registration_fields.label :state_license, "State" %>
<%= state_registration_fields.select :state_license,
options_for_select(@state_licenses_1), {}, {class:
"state_license form-control btn-default btn-block",
name: "state_license"} %>
</div>
....
<div class="col-sm-3 col-md-3">
<%= state_registration_fields.label :state_license_number,
"License Number or 'Exempt' " %>
<%= state_registration_fields.text_field :state_license_number,
class: "form-control input", type: "text", placeholder: "License
Number" %>
</div>
....
Javascript - custon .js: Это следует за отличной работой Мики Тууполы Chained selects plugin for jQuery and Zepto, удаленной verson.
$(document).ready(function() {
$(".state_license_name_user").remoteChained({
parents : ".state_license",
url : "state_registrations/state_license_name_user",
loading : "Loading...",
clear : true
});
});
Controller - state_registrations_controller.rb: Это то, что прикован:
def state_license
@state_licenses = ['State (select)'] + StateRegistration.all.order(:state_license).pluck(:state_license).uniq
end
def state_license_name_user
state_license_name_users = StateRegistration
.where("state_license = ?", params[:state_license])
.order(:state_license_name_user)
.pluck(:state_license_name_user).uniq
render :json => state_license_name_users.map {|value| [value, value]}
end
Controller - users_controller.rb:
def update
@user = User.includes(:state_registrations).find(params[:id])
raise params.inspect
В PARAMS возвращенное показывают, что: state_license_number - который ISN 't clained - является частью хэша state_registrations. Прикован options_for_select,: state_license и: state_license_name_user (не показан на выше точки зрения), являются отдельными (в конце):
{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"xxxx==",
"user"=>{"email"=>"xxx", ..., "state_registrations_attributes"=>{"0"=
{"state_license_number"=>"OREGON-12345", "submitted_by"=>"user"}}, ...,
"state_license"=>"Oregon", "state_license_name_user"=>"Tax Preparer",
"commit"=>"UPDATE Profile", "controller"=>"users", "action"=>"update",
"id"=>"1"}
Эти три поля,: state_license,: state_license_name_user, а также: state_license_number, являются частью state_registrations. Они не включены отдельно в таблицу пользователей. Моделирование состояния и пользовательских моделей индексируются, т. Е. Таблица state_registrations имеет поле user_id, а таблица users имеет поле state_registration_id.
Я попробовал несколько обходов без успеха при сохранении: state_license и: state_license_name_user, включая использование collection_select, используя дочерний индекс каждой записи в пространство имен (хотя, откровенно говоря, я не уверен, что делал это правильно). Я думаю, мне нужно получить эту экономию, прежде чем беспокоиться о цепочке. (1) Цепочка работает, когда есть только одна запись. (2) Он разбивается на несколько записей.
Драгоценный камень nested_form_fields обеспечивает «ассоциации с именами»; однако я не понимаю предлагаемое использование [которое, тем не менее, я пробовал, после показанного примера - снова без успеха] и/или если оно применимо здесь. Nested_Form_Fields documentation
Поскольку драгоценный камень написан на javascript, использование options_for_select с цепочкой jQuery может оказаться невозможным без повторной записи кода драгоценного камня. Тем не менее, я хотел бы получить некоторые отзывы. Заранее спасибо.
Глядя на ваше представление, кажется, что state_license_number не вложен внутри f.nested_fields_for: state_registrations. Но это должно быть, если это поле state_registrations. И да, сначала вы должны сделать эту работу без аддона jquery. Вы не используете ассоциацию с расширением имен, чтобы игнорировать эту часть документов. – Nico
@nico Nico, спасибо, что ответили. Джастин Лав и я решили раньше сегодня днем - и опубликуем ответ позже. Проблема не имела ничего общего с вашим драгоценным камнем и/или конфликтом с опциями для выбора jquery chaining. Скорее, мне нужно установить, что у многих есть ассоциация для государственных регистраций. Я непреднамеренно пытался сэкономить на мастер-таблице. – user3763682
Ах, здорово, что вы это решили! – Nico