问题 用户可以选择语言
模型 用户
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? }
FluentLanguage
belongs_to :user
belongs_to :language
语言
has_many :fluent_languages, foreign_key: 'language_id'
我希望选择看起来像这样 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"}
我的代码中的另一个问题 - 对FluentLanguage中的每条记录使用自动完成渲染进行多选。另一个 - 默认数据是来自FluentLanguage的语言ID,而不是来自languages表的语言标题。
您建议针对此问题设计什么设计?
答案 0 :(得分:0)
你问过几个问题,我会回答最重要的一个问题。一旦你有了一个好的数据模型,使表单能够做你想做的解决方案会更容易。
看来你在用户和语言之间有一个has_many_through关系,FluentLanguage作为直通表,需要定义。
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是has_many_through关系如何工作以及如何构建它的良好来源。 api docs也很有用。