2014-11-13 3 views
0

"새"보기에서 데이터베이스에 새 사용자를 만들고 저장하려는 경우 새 레코드를 데이터베이스에 저장하지 마십시오.하지만 콘솔에서이 레코드를 만들어보십시오. 어떻게 작동합니까?새 레코드가 데이터베이스에 저장되지 않음

당신이 트랜잭션이

2.1.2 :001 > user = User.new(name:"mike", email:"[email protected]", password:"123456", password_confirmation:"123456") 
=> #<User id: nil, name: "mike", email: "[email protected]", created_at: nil, updated_at: nil, password_digest: "$2a$10$uxFvZ4/T3rb2rQlEBAKkWuo13CUZsaBNG.DD5DPpHlI..."> 
2.1.2 :002 > user.save 
    (0.2ms) begin transaction 
    User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE "users"."name" = 'mike' LIMIT 1 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('[email protected]') LIMIT 1 
Binary data inserted for `string` type on column `password_digest` 
    SQL (1.8ms) INSERT INTO "users" ("created_at", "email", "name", "password_digest", "updated_at") VALUES (?, ?, ?, ?, ?) [["created_at", "2014-11-13 10:08:01.402404"], ["email", "[email protected]"], ["name", "mike"], ["password_digest", "$2a$10$uxFvZ4/T3rb2rQlEBAKkWuo13CUZsaBNG.DD5DPpHlI3WjzUhl3.u"], ["updated_at", "2014-11-13 10:08:01.402404"]] 
    (204.8ms) commit transaction 
=> true 

작동하지 않습니다

를 실행 볼 수 있듯이이, 내 사용자 컨트롤러

class UsersController < ApplicationController 
    def index 
    @users = User.all 
    end 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    @user.save 
    redirect_to @user 
    end 

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

    private 
    def user_params 
    params.require(:user).permit(:email, :name) 
    end 
end 

이 콘솔에서 로그입니다? 나쁜 영어로 죄송합니다.

답변

1

컨트롤러에서 passwordpassword_confirmation을 허용해야합니다. 이처럼 보이도록 user_params 방법을 변경해보십시오 :

def user_params 
    params.require(:user).permit(:email, :name, :password, :password_confirmation) 
end 

편집합니다. 또한 양식을 제출할 때 일어나는 일을 공개하려면 웹 서버 로그에서 발췌 한 내용을 붙여 넣으십시오.

+0

예는, 당신을 works.thank, 그것은 http://pastebin.com/01DWVDRn – vveare138

+0

@ 큰 vveare138 웹 서버 로그입니다! 대답을 수락하는 것을 고려해주십시오. – gmile

+0

5 분 기다려주세요 :) 작은 카마를 가지고 있습니다. – vveare138

0

save!에 대한 save을 변경하려고하면 더 나은 출력이 없거나, 부정 무슨 표시가 나타날 수 있습니다

def create 
    [...] 
    @user.save! 
    [...] 
end 
+0

을 언급하는 것을 잊어 버렸습니다. 아직 사용하지 않는 경우에 대비하여 오류 메시지에서 더 많은 것을 얻기 위해'better_errors' 보석을 사용할 수 있습니다. –

0

당신은 레일 4와 검증에 PARAMS 허용에 대해 읽어해야합니다.

특성 (이름, 전자 메일, 암호)에 대한 사용자 모델의 유효성을 검사하는 경우 최소한 이러한 특성이 없으면 레코드가 저장되지 않습니다.

또한 레일즈는 보안상의 이유로 각 양식의 예상 매개 변수를 허용하여 누구도 새 필드를 추가하지 않고 양식과 함께 제출하지 못하게해야합니다.

Mass assignment in rails이고 레일 3과 4는 그 차이가 있습니다.

또한 왜 기록이 성공적으로 저장되지 않았는지 알아 보려면 validationsthis을 살펴보십시오.

예 :

user = User.new(name: "AnyName") 
user.save 
puts user.errors.messages -->> This will print email cannot be blank in your server if you are validating the presence of the email attribute. 
관련 문제