2013-09-26 3 views
1

Im следуя Райан Bates скринкаст на polymoprhic ассоциацийRails 4 - railscast # 154 полиморфные ассоциации

http://railscasts.com/episodes/154-polymorphic-association-revised?view=asciicast

Я сделал это успешно, прежде чем на приложении Rails 3, но теперь им на Rails 4 и я чувствую как им, имеющие проблемы с сильными параметрами ..... но я могу ошибаться

, когда я иду в мою консоль, чтобы создать новое событие для пользователя она работает

a = Event.first 
c = a.events.create!(name: "Hello World") 

это работает и посты на моих событиях индексной странице

howwever, когда я пытаюсь использовать фактическую форму на сайте он создает запись, но поле имени ноля и пустое ... и я не получаю какие-либо ошибки

Heres мой контроллер (им в основном просто копировать то, что Райан Бейтс делает на сайте)

class EventsController < ApplicationController 
before_filter :load_eventable 
def index 
    @eventable = Admin.find(params[:admin_id]) 
    @events = @eventable.events 
end 

def new 
    @event = @eventable.events.new 
end 

def create 
    @event = @eventable.events.new(params[:events]) 
    if @event.save 
    redirect_to [@eventable, :events], notice: "Event created." 
    else 
    render :new 
    end 
end 

private 
    def load_eventable 
    resource, id = request.path.split('/')[1,2] 
    @eventable = resource.singularize.classify.constantize.find(id) 
    end 

    def events 
    params.require(:events).permit(:name, :address, :city, :state, :zip, :date, :time, :admin_id) 
    end 
end 

здесь моя форма (очень просто и им просто используя имя сейчас)

= form_for [@eventable, @event] do |f| 
    .field 
    = f.text_field :name 
    = f.submit 
+0

Когда сообщения формы на сервер отправляются в params [: events]? – Dhaulagiri

ответ

2

Попробуйте следующее: создайте новое событие с помощью метода event_params, который вы определили вместо хэша params. Я изменил имя, чтобы сделать его немного менее запутанным.

class EventsController < ApplicationController 

    ... 
    def create 
    @event = @eventable.events.new(event_params) 
    if @event.save 
     redirect_to [@eventable, :events], notice: "Event created." 
    else 
     render :new 
    end 
    end 

    private 
    ... 

    def event_params 
     params.require(:events).permit(:name, :address, :city, :state, :zip, :date, :time, :admin_id) 
    end 
end 
Смежные вопросы