RoR collection_select (не работает) V collection_check_boxes (работает!) - Почему? - PullRequest
1 голос
/ 07 января 2020

Я пытаюсь сохранить некоторые данные в моей модели, используя collection_select, но это не работает, и я не понимаю, почему. Я попытался использовать collection_check_boxes, которые работают легко. Я использую подход HABTM, и я уверен, что мои файлы model.rb закодированы правильно, поэтому я думаю, что что-то в моем коде представления ниже не правильно.

Пожалуйста, я могу получить некоторую помощь

- --- НИЖЕ НЕ РАБОТАЕТ

 <div class="form-group control col-md-12 mb-4">
    <%= form.label :category, 'Pick A Category Most Appropriate' %>
        <div class= 'is-focused field has-addons control is-expanded select is-fullwidth'>
              <%= form.collection_select :category_ids , Category.all, :id, :name %>
        </div>
  </div>

---- НИЖЕ РАБОТАЕТ ОК!

  <div class="field">
    <%= form.label "Pick A Category Most Appropriate" %><br />
    <%= form.collection_check_boxes :category_ids, Category.all, :id, :name do |b| %>
      <div class="collection-check-box">
        <%= b.label %>
        <%= b.check_box %>
      </div>
    <% end %>
  </div>

Как видно ниже, я получаю недопустимую ошибку, но не при использовании collection_check_boxes

Started PATCH "/listings/1" for ::1 at 2020-01-07 20:33:13 +0000
Processing by ListingsController#update as HTML
  Parameters: {"authenticity_token"=>"Y/rvJ3EcwV6iioSV8fXUkkwxRRiZ7o8ZV94sGS5G3liYnghcef2AWBc50g5gX4ULhmGyp163vtVfRAgil8gnMA==", "listing"=>{"name"=>"New Listing", "description"=>"This is a new listing", "category_ids"=>"1", "end_date(1i)"=>"2020", "end_date(2i)"=>"1", "end_date(3i)"=>"6", "end_date(4i)"=>"22", "end_date(5i)"=>"57"}, "commit"=>"Update Listing", "id"=>"1"}
  Listing Load (4.8ms)  SELECT "listings".* FROM "listings" WHERE "listings"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/listings_controller.rb:69:in `set_listing'
Unpermitted parameter: :category_ids
Redirected to http://localhost:3000/listings/1
Completed 302 Found in 30ms (ActiveRecord: 4.8ms | Allocations: 1492)


Started GET "/listings/1" for ::1 at 2020-01-07 20:33:13 +0000
Processing by ListingsController#show as HTML
  Parameters: {"id"=>"1"}
  Listing Load (0.6ms)  SELECT "listings".* FROM "listings" WHERE "listings"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/listings_controller.rb:69:in `set_listing'
  Rendering listings/show.html.erb within layouts/application
  Rendered listings/show.html.erb within layouts/application (Duration: 1.1ms | Allocations: 313)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 50ms (Views: 44.4ms | ActiveRecord: 0.6ms | Allocations: 5953)

ОБНОВЛЕНИЕ ДЕЙСТВИЯ ОТ КОНТРОЛЛЕРА

def update
    respond_to do |format|
      if @listing.update(listing_params)
        format.html { redirect_to @listing, notice: 'Listing was successfully updated.' }
        format.json { render :show, status: :ok, location: @listing }
      else
        format.html { render :edit }
        format.json { render json: @listing.errors, status: :unprocessable_entity }
      end
    end
  end

СИЛЬНЫЕ ПАРАМЕТРЫ

def listing_params
  params.require(:listing).permit(:name, :description, :end_date, category_ids:[])
end

1 Ответ

0 голосов
/ 09 января 2020

Из комментария выше:

Что происходит, если ваш collection_select возвращает строку / целое число, а не массив, как того требуют ваши сильные параметры.

Что происходит, когда вы добавляете несколько: true для ваш вызов collection_select?


Я предполагаю, что вам нужно отношение принадлежащих вам категорий в вашей модели листинга:

class Listing < ApplicationRecord
  belongs_to :category
  ...

end
...