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 也很有用。
问题 用户可以选择语言
型号 用户
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 也很有用。