Collection_Select не будет сохранен в базе данных, даже если параметры в консоли верны - PullRequest
0 голосов
/ 27 сентября 2018

Я застрял, пытаясь получить мою форму с collection_select для сохранения.У меня есть 3 модели (События, Пользователи, Предметы), плюс модель соединения, чтобы связать Предметы с Событиями (Event_Items).

Моя цель - чтобы каждый пользователь мог присоединиться к событиям, и каждый пользователь может указать список предметов, которые они будут приносить на событие из инвентаря, уникального для каждого пользователя.

Моя частичная форма с выбором коллекции выглядит следующим образом:

<%= form_for [@event, @event_items], remote: true do |f| %>
<%= f.hidden_field :user_id, value: current_user.id %>

<div class="form-group">

  <%= f.collection_select(:item_id, current_user.items.all, :id, :title, { :prompt => "Select an Item", :selected => @item_id}, { class: "form-control"}) %>
</div>

<%= f.submit "Submit", class: "btn btn-primary", id: "event-item-button" %>

Мой event_items_controller выглядит следующим образом:

 class EventItemsController < ApplicationController
  before_action :authenticate_user!

  def new
    @event_item = EventItem.new
  end


  def create
      @event_item = EventItem.new
      @event = Event.find(params[:id])

      if @event_item.save
        flash[:success] = "Item Added to List"   
        redirect_to @event
      else
        flash.now[:danger] = "Please try again"
        redirect_to @event
      end

  end

  def destroy
    @event_item = EventItem.find(params[:id])

  end

  private

    def event_item_params
      params.require(:event_item).permit(:event_id, :user_id, :item_id)
    end


end

На странице показа событий у меня есть этот раздел, в котором я повторяюсь для каждого участника иотобразить партиалы Event_Item:

            <% @event.attendees.each do |user| %>
             <div class="col-md-4">
                 #should render each existing item on the list. 
                 #Doesn't work yet
                 <%= render 'event_items/event_item' %>
             </div>     

             <% if user == current_user %>
                #renders dropdown with only current user's inventory
                #currently shows items correctly, just doesn't save to 
                #database
                <%= render 'event_items/form' %>
             <% end %>

            <% end %>

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

Started POST "/Events/27/event_items" for 127.0.0.1 at 2018-09-26 19:54:32 -0500
Processing by EventItemsController#create as JS
  Parameters: {"utf8"=>"✓", "event_item"=>{"user_id"=>"5", "item_id"=>"2"}, "commit"=>"Submit", "event_id"=>"27"}
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 5], ["LIMIT", 1]]
Completed 404 Not Found in 2ms (ActiveRecord: 0.3ms)



ActiveRecord::RecordNotFound (Couldn't find Event without an ID):

app/controllers/event_items_controller.rb:11:in `create'

1 Ответ

0 голосов
/ 27 сентября 2018

В своем действии create вы делаете:

@event = Event.find(params[:id])

Но params не имеет :id, оно имеет :event_id.Таким образом, это, вероятно, должно быть:

@event = Event.find(params[:event_id])

И, ваше create действие должно выглядеть примерно так:

def create

  @event = Event.find(params[:event_id])
  @event_item = @event.event_items.new(event_item_params)

  if @event_item.save
    flash[:success] = "Item Added to List"   
    redirect_to @event
  else
    flash.now[:danger] = "Please try again"
    redirect_to @event
  end

end

Делая:

@event_item = @event.event_items.new(event_item_params)

event_id будет установлен на новый event_item.(Это предполагает, естественно, что Event has_many :event_items и EventItem belongs_to :event.)

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