Rails 5: может записывать поля флажков в db с collection_check_boxes - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь разрешить выбор нескольких полей-флажков в простой форме:

<%= form_with(model: coffee_roast, local: true) do |form| %>
  <% if coffee_roast.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(coffee_roast.errors.count, "error") %> prohibited this coffee_roast from being saved:</h2>

      <ul>
      <% coffee_roast.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <strong><%= form.label :name %></strong>
    <%= form.text_field :name, id: :coffee_roast_name %>
  </div>

  <div class="field">
    <strong><%= form.label :bean,"Select bean(s)" %></strong>
    <%= collection_check_boxes(:coffee_roast, :coffee_beans, CoffeeBean.all, :id, :name) %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

Коллекция collection_check_box отлично работает, извлекая значения из другой модели через таблицу соединения.Мои модели:

coffee_bean.rb

class CoffeeBean < ApplicationRecord
    has_many :coffee_blends
    has_many :coffee_roasts, through: :coffee_blends
end

coffee_roast.rb

class CoffeeRoast < ApplicationRecord
    belongs_to :roaster
    has_many :coffee_blends
    has_many :coffee_beans, through: :coffee_blends
    has_many :flavours, through: :coffee_flavours
end

И таблица соединения

coffee_blend.rb

class CoffeeBlend < ApplicationRecord
    belongs_to :coffee_bean
    belongs_to :coffee_roast
end

проблема

Когда я сохраняю coffee_roast и выбираю паруФлажки, запись создается без ошибок, но я не вижу никаких идентификаторов, заполненных в таблице соединений.

Я подозреваю, что это может быть связано с тем, что не разрешены идентификаторы в coffee_roast_controller.rb

Я попробовал несколько вариантов, но не могу заставить его работать.Это моя последняя попытка:

def coffee_roast_params
  params.require(:coffee_roast).permit(:name, :coffee_bean_name, coffee_bean_id:[])
end

1 Ответ

0 голосов
/ 21 декабря 2018

Попробуйте, как показано ниже

<%= f.collection_check_boxes :coffee_bean_ids, CoffeeBean.all.order(name: :asc), :id, :name do |cb| %>
    <% cb.label(class: "checkbox-inline input_checkbox") {cb.check_box(class: "checkbox") + cb.text } %>
<% end %>

и в параметрах контроллера

coffee_bean_ids:[]

вместо coffee_bean_id:[]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...