2013-06-09 1 views
1

나는 몽고이드를 사용하는 레일즈 앱을 만들고있다. 현재이 기능은 꽤 기본이지만 예상대로 작동하지 않습니다. 특히, 업데이트가 전혀 작동하지 않습니다.레일 웨이 앱으로 몽고이드가 업데이트 저장되지 않는다

사용자를 만들 수 있지만 다시 업데이트 할 때 오류가 발생하지 않지만 저장되지는 ​​않습니다. 이것은 일부 코드에서 더 명확해질 수 있습니다. 컨트롤러에이

devise_for :users 
resources :users 

그리고 : 나는 루트이있어

## WORKS PERFECTLY FOR SIGNING USERS UP, AND FLASHES CORRECTLY 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save! 
     flash[:success] = "Welcome!" 
     sign_in @user 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 

## DOES NOT UPDATE THE USER RECORD, AND DOES NOT FLASH SUCCESS 
## IT DOES, HOWEVER, REDIRECT TO SHOW, INSTEAD OF RENDERING EDIT 
    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.save! 
     flash[:success] = "Profile edited successfully!" 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

을 그래서 그래. 코드에서 알 수 있듯이 기존 사용자를 편집하기 위해 내 의견을 검토하지 않고 해당 사용자를 편집하지 않으며 사용자가 편집되었음을 알리는 플래시를 제공하지 않지만 올바르게 리디렉션합니다. 나는 현재 사용자 검증이 없지만 (일부는 devise가있을 수도 있음) 모든 devise 관련 필드를 변경해도 문제가 해결되지 않으므로 자동 유효성 검증에 실패하지는 않습니다.

양식은 기본

<%= form_for @user do |f| %> 
    <%= f.label: name %> 
    <%= f.text_field :name %> 
    ... 
    <%= f.submit %> 
<% end %> 

종류이다.

다른 코드가 도움이 될지 잘 모르겠습니다. 저에게 알려주세요. 나는 아주 많이 놀랐다. 감사!

답변

1

당신은 당신이 update_attributes 또는 update_attributes!

@user = User.find(params[:id]) 
    if @user.update_attributes!(params[:user]) 
... 
+0

Ahhhhhh을 사용할 수 있습니다 PARAMS 통과해야합니다. 굉장해. 나는 그것을 놓쳤다는 것을 믿을 수 없다. 그 점을 지적 해 주셔서 너무 고마워요. 당신의 대답은 8 분 안에 받아 들여지고 있습니다. – Sasha