Я пытаюсь реализовать выбранный мультиселектный ввод в приложении Rails 5.У меня есть отношение has_many_and_belongs_to_many между моделью Film и моделью Actor с помощью модели соединения Cast.
class Film < ApplicationRecord
has_one_attached :avatar
has_many :casts
has_many :actors, through: :casts
accepts_nested_attributes_for :casts
end
и
class Actor < ApplicationRecord
has_many :casts
has_many :films, through: :casts
accepts_nested_attributes_for :films
end
Моя форма
<%= simple_form_for @film do |f| %>
<%= f.input :title %>
<%= f.input :synopsis %>
<%= f.simple_fields_for(:casts) do |m| %>
<%= m.collection_select :actor_id, Actor.all , :id, :name, { include_blank: true}, { class: 'chosen-select', :multiple => true, :data => { :placeholder => ' ' }} %>
<% end %>
</br>
<div class="form-actions">
<%= f.file_field :avatar, :style => "padding:10px 0px" %>
</div>
</br>
<div class="form-actions">
<%= f.button :submit, :class => "btn-primary" %>
</div>
<% end %>
</br>
Вот мой контроллер фильмов
def new
@film = Film.new
@film.casts.build
end
# POST /films
# POST /films.json
def create
@film = Film.new(film_params)
respond_to do |format|
if @film.save
format.html { redirect_to @film, notice: 'Film was successfully created.' }
format.json { render :show, status: :created, location: @film }
else
format.html { render :new }
format.json { render json: @film.errors, status: :unprocessable_entity }
end
end
end
def film_params
params.require(:film).permit(:title, :synopsis, :avatar, casts_attributes: [:film_id, :actor_id])
end
Если я установил мультиселект ": множественный => ложь ", он работает и сохраняет запись в таблице соединений.Но я не могу заставить его работать с множественным выбором.Он будет публиковать массив идентификаторов актеров, но потерпит неудачу со следующими
Started POST "/films" for 127.0.0.1 at 2018-12-29 17:11:47 +0000
Processing by FilmsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"HQyOBebjBuAFHT8TlRi7LbmQiMtmeQsc0qLip55ihrOygIsMH1p0HBOngb40y3ywNYRWDOyRWDEpwr6vGZjNJQ==", "film"=>{"title"=>"Top Gun", "synopsis"=>"Planes", "casts_attributes"=>{"0"=>{"actor_id"=>["", "13", "104"]}}}, "commit"=>"Create Film"}
Member Load (0.2ms) SELECT "members".* FROM "members" WHERE "members"."id" = ? ORDER BY "members"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ /Users/simonalice/.rvm/gems/ruby-2.6.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Unpermitted parameter: :actor_id
(0.0ms) begin transaction
↳ app/controllers/films_controller.rb:32
(0.0ms) rollback transaction
. Для этого типа проблемы вполне достаточно использовать один выбор или использовать несколько флажков, но не использовать выбранный гем.