2011-01-05 7 views
0

w/dev 로그가 업데이트되었습니다. 아래 참조제출 양식을 제출하면 root_url로 리디렉션됩니다.

내 라우팅에 허영성 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로 리디렉션되는 경우에도 문제가 지속됩니다. 레이크 루트에서 업데이트 경로가 올바르지 만 편집 양식이 올바르게 표시됩니다. 여기에 양식 레이크 노선 것을 얻을 수있다 :

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) 

가 왜 리디렉션이 일어나지 않는 제출에서 dev에 로그입니까 ??

+0

development.log 파일을 확인하십시오. 무슨 일이 일어나고 있는지 힌트를 줍니까? –

+0

양식 업데이트 후 리디렉션이 발생하는 이유 ... 내 dev 로그가 다음과 같습니다. UsersController # show by HTML로 처리 { "commit"=> "update", "authenticity_token"=> "OM1lIzizuFCYlxC3XmtmG/=> ""= ""이것은 업데이트되어야합니다 "}} 사용자로드 (0.2ms) SELECT"사용자 "* FROM"users "WHERE ("users "."username "= '1') LIMIT 1 http : //.0.0.0.0:3000/ 로 리디렉션 됨 ApplicationController :: current_user ApplicationController :: current_user_session – owilde1900

답변

2

오히려 이것에 대한 사용자 정의 경로를 정의하는 것이 아니라, 단지 User 클래스에 to_param 방법을 정의

당신의 경로에 대한 다음
def to_param 
    username.parameterize 
end 

params[:id] 값은 사용자 이름의 paramertized 버전이 될 것입니다. 예를 들어, 내 것은 ryan-bigg입니다.

+0

..and 일단 매개 변수화 된 문자열을 기반으로 모델을 검색 할 수 있도록 파인더를 변경해야합니다. –

+0

지원해 주셔서 감사합니다. 나는 to_param 메서드에 대해 몰랐고 양식에서 url을 정의하지 않고 설명 된대로 편집 양식을 시작할 수있었습니다.그러나 여전히 제출 후 업데이트 양식을 가져 오는 데 문제가 있습니다 ... 내 개발 로그를 보니 양식을 제출 한 후 루트로 리디렉션되는 것으로 보입니다. 그게 왜 일어날 지 모든 아이디어. 고마워요 – owilde1900

+0

@ owilde1900 : 더 이상의 정보가 없어도 미안 해요. –

0

로그에 이러한 경우는 나타나지 않지만 사용자 모델에서 attr_accessible:description이 추가되었는지 확인해야합니다. 그것은 저에게 전에 일어났습니다 - 양식은 효과가 있지만 정보는 저장되지 않습니다.

관련 문제