форма обновления, перенаправляющая на root_url при отправке - Rails 3 - PullRequest
0 голосов
/ 05 января 2011

Обновлено w / dev log.См. Ниже

Я использую тщеславные URL в своей маршрутизации, и я предполагаю, что это как-то связано с этим ... Короче, моя проблема в том, что я не могу заставить пользователя обновить своиЯ могу получить форму редактирования, чтобы показать, но при отправке метод обновления не запускается, и я также не получаю "сбой" или "успех".

Соответствующие маршруты выглядят так:

  resources :users do
    resources :friends
  end

 match '/:username/edit' => 'users#edit', :as => "edit_user"
 match '/:username' => 'users#show', :as => "user"

Моя форма теперь выглядит так, но я пробовал пару разных вещей.

<%= form_for @user, :url => user_path(@user.username) do |form| %>  
<%= render 'shared/error_messages', :object => form.object %>
 <div class="form">  
    <p> <%= form.label :description, "Message to friends" %>  <br />  
     <%= form.text_area :description %> </p> 

     <%= form.submit "Update" %>  
 </div>  
 <% end %>

Контроллеры редактирования и обновления выглядят так:

 def edit 
    @user = User.find_by_username(params[:username]) 
  end

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
       redirect_to user_url(current_user.username), :flash => { :success => "wham" }
    else
      redirect_to user_url(current_user.username), :error => { :error => "shiz" }
    end
end

В настоящее время, когда отправляется форма обновления, вы перенаправляетесь на URL пользователей, но ничего не происходит. Буду признателен за любую помощь. Спасибо!

Обновление ---- Я изменил своймаршруты, как описано ниже с использованием to_param. Это работает просто отлично, но проблема все еще сохраняется, когда моя форма обновления просто перенаправляет на root_url. В Rake Routes я получаю правильный путь для обновления, и форма редактирования отображается правильно. Вот то, что я получаю формуграбли маршруты:

PUT    /users/:id(.:format)   {:controller=>"users", :action=>"update"}

И это журнал разработчиков от отправки моей формы

Started POST "/1" for 127.0.0.1 at Wed Jan 05 16:09:54 -0500 2011
  Processing by UsersController#show as HTML
  Parameters: {"commit"=>"Update User", "authenticity_token"=>"OM1lIzizuFCYlxC3XmtmG/btqAsyjekHtqsiwlUDn3M=", "utf8"=>"✓", "username"=>"1", "user"=>{"description"=>"Update the message please"}}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE ("users"."username" = '1') LIMIT 1
Redirected to http://0.0.0.0:3000/
ApplicationController::current_user
ApplicationController::current_user_session
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
ApplicationController::current_user_session
Completed 302 Found in 44ms


Started GET "/" for 127.0.0.1 at Wed Jan 05 16:09:54 -0500 2011
  Processing by PagesController#home as HTML
ApplicationController::current_user
ApplicationController::current_user_session
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
ApplicationController::current_user_session
ApplicationController::current_user
ApplicationController::current_user
ApplicationController::current_user
ApplicationController::current_user
Rendered pages/home.html.erb within layouts/application (22.2ms)
Completed 200 OK in 61ms (Views: 32.4ms | ActiveRecord: 0.2ms)

Почему происходит такое перенаправление ??

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Вместо того, чтобы определять собственные маршруты для этого, просто определите метод to_param в классе User:

def to_param
  username.parameterize
end

Тогда для ваших маршрутов значение params[:id] будет параметризованной версией имени пользователя,Например, мой будет ryan-bigg.

0 голосов
/ 08 января 2011

Даже если в вашем журнале не указано, что это так, я бы также проверил, добавлено ли в attr_accessible значение :description в модели пользователя. Это случилось со мной раньше - форма работает, но информация не сохраняется.

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