рельсы формы 101 - PullRequest
       11

рельсы формы 101

1 голос
/ 18 февраля 2012

вот мой контроллер:

class TalentController < ApplicationController
  def index
  end

  def new
    @talent = Talent.new
  end

  def create
        @talent.update_attributes!(params)
  end
end

вот мое приложение / views / talent / new.html.haml:

= "Create new talent"

= form_for @talent, :url => {:action=>:create, :controller=>"talent"}, :method => :post do |f|
  = f.label :First_Name
  = f.text_field :first_name
  = f.label :Last_Name
  = f.text_field :last_name
  = f.label :City
  = f.text_field :city
  = f.label :State
  = f.text_field :state
  = f.label :Zip_code
  = f.text_field :zip_code
  = f.submit "Create"

Когда я нажимаю кнопку создания, я получаю эту ошибку.

No route matches [POST] "/talent/new"

вот мои маршруты рейка:

                    /                          {:action=>"index", :controller=>"talent"}
talent_index GET    /talent(.:format)          {:action=>"index", :controller=>"talent"}
             POST   /talent(.:format)          {:action=>"create", :controller=>"talent"}
  new_talent GET    /talent/new(.:format)      {:action=>"new", :controller=>"talent"}
 edit_talent GET    /talent/:id/edit(.:format) {:action=>"edit", :controller=>"talent"}
      talent GET    /talent/:id(.:format)      {:action=>"show", :controller=>"talent"}
             PUT    /talent/:id(.:format)      {:action=>"update", :controller=>"talent"}
             DELETE /talent/:id(.:format)      {:action=>"destroy", :controller=>"talent"}

Что мне здесь не хватало ??

1 Ответ

0 голосов
/ 18 февраля 2012

Я не знаю, почему форма пытается отправить на new. Тем не менее, в вашем коде есть некоторые улучшения. Прежде всего не нужно передавать :url и :method на form_for. Единственное, что вам нужно, это:

= form_for @talent do |f|

Rails позаботится об остальном автоматически.

Код в методе create вашего контроллера неверен. Когда вызывается create, это новый запрос, и поэтому @talent будет неопределенным. Вы должны установить его первым. Вторая ошибка заключается в том, что вы используете update_attributes, который используется для обновления существующей записи в базе данных. Вы хотите создать новую запись, поэтому вы должны использовать create. Другой способ - просто создать новый экземпляр Talent и вызвать на нем save.

Итак, это должно выглядеть так:

def create
  @talent = Talent.create(params[:talent])
end

Или вот так:

def create
  @talent = Talent.new(params[:talent])
  if @talent.save
    # Saved successfully, do a redirect or something...
  else
    # Validation failed. Show form again so the user can fix his input.
    render :action => 'new'
  end
end
...