Я получил переменную во вложенной модели (account
), принадлежащую пользовательской модели, в которой есть столбец для :skills
. в моем edit_user_path я хотел бы иметь возможность сохранять несколько навыков в этом столбце с помощью флажков. Для этого я разрешил skills
в контроллере в виде массива, даже если он сохранен в виде строки в базе данных.
Мой контроллер:
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, :account,
account_attributes:[:id, :username, {:skills => []}, :description, :location, :avatar, :tags, :tag_list])
end
Если я сохраняю несколько значений через Флажки в эту переменную внутри вложенной формы, я делаю это так:
<% skills = ["Coding", "Design", "Petting Cats"] %>
<% skills.each do |skill| %>
<div class="form-check form-check-inline">
<div class="custom-control custom-checkbox">
<%= form.check_box :skills, { multiple: true, class:"custom-control-input",id: skill }, skill, false %>
<%= form.label skill, class:"custom-control-label", for: skill %>
</div>
</div>
<% end %>
Это работает, и значения сохраняются в виде массива, но, как ни странно, массив после сохранения в базе данных выглядит следующим образом:
"[\"Artist\", \"Mixing\", \"Mastering\"]"
вместо этого:
["Artist", "Mixing", "Mastering"]
Что приводит к неприятностям, поскольку я хотел бы через всех пользователей впоследствии выполнять "фильтрацию" по определенным навыкам, например User.account.where(skills: "Petting Cats")
, если пользователь Petting Cats
сохранил где-то внутри массива.
Для разработки я использую SQLite, для производства PostgresQL. Как сохранить несколько строк в строковую переменную в виде чистого массива без беспорядка и как позже выполнить итерацию по массиву с помощью where
метода запроса?