Rails Bootstrap_Form Collection Выбрать - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь заставить мой bootstrap_form collection_select работать, но у меня возникли некоторые трудности. Я использую Bootstrap 4 для контекста.

У меня есть коллекция тегов, и я бы хотел, чтобы пользователь мог выбрать несколько тегов для добавления к одному событию. Я не могу выбрать несколько тегов. В настоящее время выбор отображается с действительными параметрами выбора. У меня также есть проблема с моей отправкой.

_form. html .erb:

<%= f.collection_select :tags, Tag.all, :id, :name,  hide_label: true, options: { placeholder: "Tag Id", multiple: true}, html_options: { input_group_class: 'input-group-lg' } %>

Events_controller.rb (Controller):


  def create
    @event = Event.new(event_params)
    respond_to do | format |
      if @event.save
        results = Geocoder.search(@event.location)
        lat, long = results.first.coordinates
        @event.location_lat = lat
        @event.location_long = long
        @event.save
        UserEventRelationship.create(event_id: @event.id, user_id: current_user.id, role_type_id: 0)
        format.html { redirect_to @event, notice: 'Event was successfully created.' }
        format.json { render json: @event, status: :created, location: @event }
      else
        format.html {render 'new'}
        format.json {render json: @event.errors, status: :unprocessable_entity }
      end
    end
  end


Событие .rb (модель):

class Event < ApplicationRecord
    has_many :user_event_relationships
    has_many :users, through: :user_event_relationships
    has_and_belongs_to_many :tags
    has_one_attached :picture
    validates :name, :location, :date_to, :date_from, presence: true
    validate :valid_date_range_required
end

Tag.rb:

class Tag < ApplicationRecord
  has_and_belongs_to_many :events
end

Присоединение к таблице миграции:

class CreateJoinTableEventsTags < ActiveRecord::Migration[6.0]
  def change
    create_join_table :events, :tags do |t|
       t.index [:event_id, :tag_id]
       t.index [:tag_id, :event_id]
    end
  end
end

Ошибка:

NoMethodError - undefined method `each' for "10":String:
  app/controllers/events_controller.rb:30:in `create'

1 Ответ

0 голосов
/ 21 марта 2020

Я разобрался в проблеме! Мне пришлось запретить использование тегов в качестве параметра в event_params, показанном здесь:

      params.require(:event).permit(:name, :date_from,
      :location, :date_to, :description, :picture)

Вместо этого я написал некоторый код в моем контроллере создания, который нашел теги из поля тегов, а затем добавил их в @ event.tags.

Вот этот код:

def create
    tags = Tag.find(params.require(:event)['tags'])
    #puts "Params: #{params}"
    @event = Event.new(event_params)
    respond_to do | format |
      if @event.save
        results = Geocoder.search(@event.location)
        lat, long = results.first.coordinates
        @event.location_lat = lat
        @event.location_long = long
        tags.each {|tag|
          @event.tags << tag
        }
        #@event.save
        UserEventRelationship.create(event_id: @event.id, user_id: current_user.id, role_type_id: 0)
        format.html { redirect_to @event, notice: 'Event was successfully created.' }
        format.json { render json: @event, status: :created, location: @event }
      else
        format.html {render 'new'}
        format.json {render json: @event.errors, status: :unprocessable_entity }
      end
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...