rails 4 具有嵌套属性的多重自动完成

rails 4 multiple autocomplete with nested attributes

问题 用户可以选择语言

型号 用户

      has_many :fluent_languages, foreign_key: 'user_id'
      accepts_nested_attributes_for :fluent_languages,
                                   allow_destroy: true,
                                   reject_if: proc { |attributes|     attributes['user_id'].blank? || attributes['language_id'].blank? }

流利的语言

  belongs_to :user
  belongs_to :language

语言

has_many :fluent_languages, foreign_key: 'language_id'

我希望 select 看起来像这样 https://select2.github.io/examples.html#multiple

我的尝试:

  <%= f.fields_for :fluent_languages do |fluent_language| %>
                              <%= fluent_language.text_field :user_id, :type => 'hidden' %>
                              <%= fluent_language.autocomplete_field :language_id, autocomplete_language_language_users_path, 'data-delimiter' => ',', :multiple => true, :placeholder => 'Choose languages' %>
                              <% end %>

接下来记录到params:

"7"=>{"user_id"=>"15", "language_id"=>["English,"]}}

但正确的数据是这样的:

"4"=>{"user_id"=>"15", "language_id"=>["1995"], "id"=>"1"}

我的代码中的另一个问题 - multiselect 在 FluentLanguage 中为每条记录自动完成呈现。另一个 - 默认数据是来自 FluentLanguage 的语言 ID,而不是来自语言 table 的语言标题。

对于这个问题,您有什么建议?

你问了几个问题,我会回答最重要的一个关于设计的问题。一旦您拥有良好的数据模型,让表单执行您想要的操作的解决方案就会更容易。

看来您在 User 和 Language 之间有一个 has_many_through 关系,以 FluentLanguage 作为直通 table,需要定义。

class User
  has_many :fluent_languages
  has_many :languages, through: fluent_languages
end

class Language
  has_many :fluent_languages
  has_many :users, through: fluent_languages
end

class FluentLanguage
  belongs_to :language
  belongs_to :user
end

您将需要 运行 迁移来更新您的架构。 rails guide is a good source for how a has_many_through relationship works and how to build it. The api docs 也很有用。