Отправка формы Rails, пользователь не может быть пустым

Я пытаюсь создать событие через форму события, но все время получаю сообщение об ошибке формы: «Пользователь не может быть пустым». Событию нужен user_id, чтобы опубликовать элемент feed_item, показывающий, кто создал событие. Почему не удается создать это событие?

После создания события выскакивает ошибка под localhost: 3000 / events

event.rb

class Event < ActiveRecord::Base
  attr_accessible :description, :location, :title, :category_id, :start_date,
  :start_time, :end_date, :end_time, :image

  belongs_to :user
  belongs_to :category

  has_many :rsvps
  has_many :users, through: :rsvps, dependent: :destroy

  mount_uploader :image, ImageUploader

  validates :title, presence: true, length: { maximum: 60 }
  validates :user_id, presence: true

create_events.rb (база данных)

class CreateEvents < ActiveRecord::Migration
  def change
    create_table :events do |t|
      t.string :title
      t.date :start_date
      t.time :start_time
      t.date :end_date
      t.time :end_time
      t.string :location
      t.string :description
      t.integer :category_id
      t.integer :user_id

      t.timestamps
    end
    add_index :events, [:user_id, :created_at]
  end
end

events_controller.rb

def index
  @events = Event.paginate(page: params[:page])

  # For calendar
  @events = Event.all
  @events_by_date = @events.group_by(&:start_date)
  @date = params[:date] ? Date.parse(params[:date]) : Date.today
  # For calendar

end

def new
    @event = Event.new
    @user = current_user
end

def create
    @event = current_user.events.build(params[:event])
    if @event.save
        flash[:success] = "Sesh created!"
        redirect_to root_url
    else
        @feed_items = []
        render 'static_pages/home'
    end
end

routes.rb

SampleApp::Application.routes.draw do

  resources :users do
    member do
      get :following, :followers, :events
    end
  end

  resources :events do
    member do
      get :members
    end
  end

  root to: 'static_pages#home'

события / new.html.erb

<%= form_for @event, :html => {:multipart => true} do |f| %>
  <%= render 'shared/error_messages', object: @event %>

Я думаю, что, возможно, отредактировал путь для ссылки в моем shared / _header.html.erb ...

<% if signed_in? %>
<%= link_to "Create Sesh", new_event_path, class: "btn btn-small btn-primary" %>
<% end %> 

<li><%= link_to "Events", events_user_path(current_user) %></li>

users_controller.rb

  def events
    # For calendar
    @events = Event.all
    @events_by_date = @events.group_by(&:start_date)
    @date = params[:date] ? Date.parse(params[:date]) : Date.today
    # For calendar

    @title = "Events"
    @event = Event.find(params[:id])
    @event = @event.rsvps.paginate(page: params[:page])
    render 'events/index'
  end

отладчик

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
!binary "dXRmOA==": ✓
!binary "YXV0aGVudGljaXR5X3Rva2Vu": 6Nm9KxVpcGCvL7l94ypuPCCs/WL4F9W6zAMKqlSf2jQ=
!binary "ZXZlbnQ=": !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  !binary "dGl0bGU=": Trying to Create Event
  !binary "Y2F0ZWdvcnlfaWQ=": '15'
  !binary "c3RhcnRfZGF0ZQ==": '2012-09-22'
  !binary "ZW5kX2RhdGU=": '2012-09-23'
  !binary "bG9jYXRpb24=": Home
  !binary "ZGVzY3JpcHRpb24=": CREATE DAMMIT!
!binary "Y29tbWl0": Create Sesh!
action: create
controller: events

отладчик для моей quick_event_form, где выскакивает ошибка «-User не может быть пустым»

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: ✓
authenticity_token: 6Nm9KxVpcGCvL7l94ypuPCCs/WL4F9W6zAMKqlSf2jQ=
event: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  title: Make SESHI
  category_id: '16'
  start_date: '2012-09-22'
  location: home
commit: Make a quick Sesh!
action: create
controller: events

НАЙДИТЕ КУЛПРИТА! .... я хочу, чтобы у пользователя было событие, если они отправили на него rsvp. Итак, если я выйду "через rsvps", событие будет создано ... однако это не поможет моей системе rsvp :(

user.rb

  has_many :rsvps
  has_many :events, through: :rsvps, dependent: :destroy

person pjmanning    schedule 22.09.2012    source источник
comment
Покажите config/routes.rb файл, чтобы показать, как настроены ваши ресурсы, и если они вложены, а также соответствующие view строки формы.   -  person Michael Durrant    schedule 22.09.2012
comment
Я бы порекомендовал вам выполнить отладку действия create с помощью отладчика и проверить все переданные параметры. Поскольку imho, ваш код выглядит разумным.   -  person Pavel S    schedule 22.09.2012
comment
эй, я только что добавил отладчик. не знаю, где ошибка. Я считаю, что это может быть в событиях маршрутов и user_controller, но я все еще не уверен   -  person pjmanning    schedule 22.09.2012


Ответы (2)


Вот как должны быть ваши действия «создать» и «создать» в файле «events_controller.rb». Удалить эту строку @user = current_user

def new
    @event = Event.new
end

def create
    @event = current_user.events.build(params[:event])
    if @event.save
       flash[:success] = "Sesh created!"
       redirect_to root_url
    else
       @feed_items = []
       render 'static_pages/home'
    end
end
person Musili    schedule 04.12.2012

Почему бы изначально не создать событие с ассоциацией пользователя в новом действии?

def new
    @event = current_user.events.build
    @user = current_user
end

def create
    @event = Event.build(params[:event])
    if @event.save
        flash[:success] = "Sesh created!"
        redirect_to root_url
    else
        @feed_items = []
        render 'static_pages/home'
    end
end
person Stone    schedule 22.09.2012