Форма Rails 3 использует «edit» вместо «update» при отправке формы - PullRequest
1 голос
/ 13 сентября 2011

У меня проблема с моей формой в Rails 3. Формы работают, если я что-то создаю, но если я пытаюсь что-то обновить, они терпят неудачу.В этом примере я попытался обновить настройки пользователя, такие как имя, почта и т. Д. Вот соответствующие фрагменты кода:

Редактирование и обновление из User_Controller.rb

  def edit
    @title = "Nutzerverwaltung"
  end

  def update
    @user = User.find(params[:id])

    if @user.update_attributes(params[:user])
      flash[:success] = "Profil aktualisiert"
      redirect_to @user
    else
      @title = "Edit"
      render 'edit'
    end
  end

Затем естьформа:

%form.user_edit
  = form_for @user, :url => {:controller => "users", :action => "update"}, :html => { :method => :put } do |f|
    = render 'shared/error_messages', :object => f.object
    = render 'fields', :f => f
    .actions
      = f.submit "Update"

Вывод моего терминала при запуске локального сервера WEBrick (некоторые метки формы имеют немецкие имена):

Started GET "/users/2/edit?utf8=%E2%9C%93&_method=put&authenticity_token=R5LfeIAjpJOpH%2B0yMD8PLO24%2Fgcct0CCqXuzoLoVibs%3D&user%5Banrede%5D=&user%5Bname%5D=Johnny&user%5Bemail%5D=t.schneider%40mail.com&user%5Bpassword%5D=&user%5Bpassword_confirmation%5D=&user%5Bplz%5D=&user%5Bort%5D=&user%5Bstrasse%5D=&commit=Update" for 127.0.0.1 at 2011-09-13 15:53:24 +0200
  Processing by UsersController#edit as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"R5LfeIAjpJOpH+0yMD8PLO24/gcct0CCqXuzoLoVibs=", "user"=>{"anrede"=>"", "name"=>"TESTer", "email"=>"t.schneider@mail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "plz"=>"", "ort"=>"", "strasse"=>""}, "commit"=>"Update", "id"=>"2"}
  User Load (1.2ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
Rendered shared/_error_messages.html.haml (2.2ms)
Rendered users/_fields.html.haml (7.5ms)
Rendered layouts/_stylesheets.html.haml (2.4ms)
Rendered layouts/_header.html.haml (3.9ms)
Rendered layouts/_footer.html.haml (2.0ms)
Rendered users/edit.html.haml within layouts/application (33.2ms)
Completed 200 OK in 118ms (Views: 36.7ms | ActiveRecord: 1.2ms)

А затем есть мои рейк-маршруты, которыемне кажется, что это нормально:

       users GET    /users(.:format)          {:action=>"index", :controller=>"users"}
       users POST   /users(.:format)          {:action=>"create", :controller=>"users"}
    new_user GET    /users/new(.:format)      {:action=>"new", :controller=>"users"}
   edit_user GET    /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
        user GET    /users/:id(.:format)      {:action=>"show", :controller=>"users"}
        user PUT    /users/:id(.:format)      {:action=>"update", :controller=>"users"}
        user DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"}
    sessions POST   /sessions(.:format)       {:action=>"create", :controller=>"sessions"}
 new_session GET    /sessions/new(.:format)   {:action=>"new", :controller=>"sessions"}
     session DELETE /sessions/:id(.:format)   {:action=>"destroy", :controller=>"sessions"}
       posts POST   /posts(.:format)          {:action=>"create", :controller=>"posts"}
   edit_post GET    /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"}
        post DELETE /posts/:id(.:format)      {:action=>"destroy", :controller=>"posts"}
        root        /(.:format)               {:controller=>"pages", :action=>"start"}
                    /(.:format)               {:controller=>"pages", :action=>"start"}
       start        /start(.:format)          {:controller=>"pages", :action=>"start"}
     kontakt        /kontakt(.:format)        {:controller=>"pages", :action=>"kontakt"}
    tagebuch        /tagebuch(.:format)       {:controller=>"pages", :action=>"tagebuch"}
 hinzufuegen        /hinzufuegen(.:format)    {:controller=>"pages", :action=>"hinzufuegen"}
   bluefocus        /bluefocus(.:format)      {:controller=>"pages", :action=>"bluefocus"}
    seminare        /seminare(.:format)       {:controller=>"pages", :action=>"seminare"}
    angebote        /angebote(.:format)       {:controller=>"pages", :action=>"angebote"}
    specials        /specials(.:format)       {:controller=>"pages", :action=>"specials"}
        shop        /shop(.:format)           {:controller=>"pages", :action=>"shop"}
registrieren        /registrieren(.:format)   {:controller=>"users", :action=>"registrieren"}
       login        /login(.:format)          {:controller=>"sessions", :action=>"login"}
      logout        /logout(.:format)         {:controller=>"sessions", :action=>"destroy"}
                    /posts/:id/edit(.:format) {:controller=>"posts", :action=>"edit"}

Я знаю, что эта функция редактирования работала однажды, но я не знаю, что изменилось, так что она больше не работает.

ЕслиВам нужна дополнительная информация, просто скажите слово.

Любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 сентября 2011

У вас есть тег %form.user_edit в вашем HAML, непосредственно перед form_for, который генерирует тег формы. Поскольку вы не указываете URL для отправки формы (в теге формы, который вы создаете вручную), он, вероятно, по умолчанию публикует текущий URL (предположительно, ваш пользовательский маршрут редактирования).

Попробуйте удалить %form.user_edit и добавить :html => {:class => 'user_edit', :method => :put} к вашему form_for вызову.

0 голосов
/ 13 сентября 2011

Похоже, что update_attributes возвращает значение False и вызывает выполнение действия редактирования. Какие атрибуты attr_accessible существуют в вашей пользовательской модели?

Также: какие проверки существуют?

...