Rails Tutorial 7 장

10022 단어 Rails
7.1.1
연습하다
브라우저에서/about에 액세스하여 디버그 정보가 표시되는지 확인하십시오.이 페이지를 표시할 때 어떤 컨트롤러와 동작을 사용했습니까?파람스 내용으로 확인해 보세요.
Rails 콘솔을 열고 데이터베이스에서 첫 번째 사용자 정보를 가져와 변수 user에 저장합니다.다음,putsuser.attributes.to_yaml을 실행하면 무엇을 표시합니까?여기 표시된 결과와 y 방법을 사용하는 유저입니다.attributes의 실행 결과를 비교해 봅시다.
1
 controller: static_pages
 action: about


>> user = User.first
  User Load (0.1ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<User id: 1, name: "El Duderino", email: "[email protected]", created_at: "2019-04-11 07:54:02", updated_at: "2019-04-11 08:43:38", password_digest: "$2a$10$hO4Ic/m6emGj03egTvc/5.b1zZgS/Gzff3S7MH9srwr...">

>> puts user.attributes.to_yaml
---
id: 1
name: El Duderino
email: [email protected]
created_at: !ruby/object:ActiveSupport::TimeWithZone
  utc: &1 2019-04-11 07:54:02.131736000 Z
  zone: &2 !ruby/object:ActiveSupport::TimeZone
    name: Etc/UTC
  time: *1
updated_at: !ruby/object:ActiveSupport::TimeWithZone
  utc: &3 2019-04-11 08:43:38.448201000 Z
  zone: *2
  time: *3
password_digest: "$2a$10$hO4Ic/m6emGj03egTvc/5.b1zZgS/Gzff3S7MH9srwrBuVoZj69kO"
=> nil
>> 

7.1.2
연습하다
포함된 Ruby를 사용하여 Show 페이지에 매직 열(created at 및 updated at) 값을 표시합니다(목록 7.4).
포함 Ruby, Time 을 사용합니다.show 페이지에 now 결과를 표시합니다.페이지를 업데이트하면 결과가 어떻게 바뀔까요?확인해 보세요.
1 행을 바꾸지 않고 병합 표시 복사
El Duderino, [email protected] 07:54:02 UTC, 2019-04-11 08:43:38 UTC2019-04-12 02:58:33 +0000
7.1.3
연습하다
show 동작에 debugger (목록 7.6) 를 삽입하고 브라우저에서/users/1에 접근해 보십시오.그런 다음 콘솔로 이동하여 puts 방법을 사용하여 params 산열의 내용을 YAML 형식으로 표시합니다.팁: 7.1.1의 연습을 참고하세요.그렇다면 연습에서 debug 방법으로 표시된 디버그 정보는 어떻게 YAML 형식으로 표시됩니까?
new 동작에 debugger를 삽입하고/users/new에 접근해 보십시오.@user의 내용은 어떻습니까?확인해 보세요.
확인
7.1.4
연습하다
(임의로) Gravatar에 계정을 만들고 메일 주소와 그림을 연결하십시오.메일 주소를 MD5 산열로 변경하여 링크된 이미지가 제대로 표시되는지 확인합니다.
7.1.4에 정의된graverfor 조수를 목록 7.12로 변경하고 크기를 선택할 수 있는 매개 변수로 받아들여 보십시오.잘 변경할 수 있다면,graverforuser,size:50이라는 명칭을 사용할 수 있습니다.중요: 이 개선된 조수는 10.3.1에서 실제로 사용할 것이다.설치하는 것을 잊지 마세요.
옵션 매개 변수는 아직도 루비 커뮤니티에서 보편적으로 사용되고 있지만, 루비 2.0에서 가져온 새로운 기능인'키 매개 변수(Keyword Arguments)'도 가능하다.리스트 7.13과 같이 방금 변경된 리스트 7.12를 교체해도 순조롭게 작동할 수 있는지 확인해 보세요.이 두 가지 실현 방법은 어떤 차이가 있습니까?생각해보세요.
확인
7.1.2
연습하다
목록 7.15의:name을:nome로 바꾸려고 시도합니다.어떤 오류 정보를 표시합니까?
블록의 모든 변수 f를 foobar로 교체해 보십시오. 확인 결과는 변하지 않습니다.확실히 결과는 변하지 않았지만 변수 이름을 포바바라고 부르는 것은 좋은 변경이 아닌 것 같다.그 이유를 생각해 보세요.


form을 나타내는 f이기 때문에 이해하기 어려운 변수명을 붙여서는 안 된다
7.2.2
연습하다
Learn Enough HTML to Be Dangerous에서 HTML은 수동으로 작성되는데 form 태그를 사용하지 않는 이유는 무엇입니까?이유를 생각해 보세요.
입력란이 없고 발송된 정보가 없기 때문에form 탭을 사용할 필요가 없습니다
7.3.2
연습하다
1./signup?admin=1에 접근하여 디버깅 정보에서 params에 admin 속성이 포함되어 있음을 확인합니다.

Started GET "/signup?admin=1" for 49.251.69.218 at 2019-04-12 09:38:14 +0000
Cannot render console from 49.251.69.218! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255

7.3.3
연습하다
최소 문자 수가 5로 변경되면 확인 오류 정보도 자동으로 업데이트됩니다.
전송되지 않은 사용자 등록 양식(그림 7.12)의 URL을 전송된 사용자 등록 양식(그림 7.18)의 URL과 비교합니다.URL이 왜 다른가요?생각해보세요.
1
오류 표시
The form contains 1 error.
Password is too short (minimum is 5 characters)

전송되지 않은 사용자 등록 테이블의 URL은 다음과 같습니다.“・・・/signup”
다음 라우트를 수행합니다.
발송된 사용자 등록 양식의 URL은 다음과 같습니다.“・・・/users”
다음 라우트를 수행합니다.
7.3.4
연습하다
목록 7.20에 설치된 오류 정보의 테스트를 기입하십시오.얼마나 세밀한 테스트를 할지는 자네에게 맡기겠네.목록 7.25에 템플릿이 준비되어 있으니 참고하십시오.
사용자 로그인 테이블의 URL은/signup입니다. 잘못된 사용자 로그인 데이터를 보내면 URL은/users가 됩니다.이것은 목록 5.43에 추가된 명명 경로(/signup)와 RESTful 경로(목록 7.3)의 기본 설정 사이의 차이로 인해 발생한 결과입니다.명세서 7.26과 명세서 7.27의 내용을 참고하여 이 문제를 해결하세요.만약 순조롭게 진행된다면, 어느 URL이든지/signup이어야 한다.아, 그런데 시험은 항상 그린이었어요.왜 그랬을까?(생각해 보세요)
리스트 7.25의post부분을 바꾸어 아까 연습과제에서 만든 새로운 URL(/signup)에 맞추세요.또한 테스트가 여전히 그린인지 확인하세요.
목록 7.27의 형식을 이전 상태로 복원하십시오. (목록 7.20) 테스트가 여전히 그린인지 확인하십시오.이게 문제야!지금 포스터를 보내는 URL이 정확하지 않기 때문입니다.assert_이 오류를 감지하기 위해 select를 사용한 테스트를 목록 7.25에 추가합니다. (테스트가 레드일 경우 성공)그리고 변경된 표(목록 7.27)를 되돌려 놓고 테스트가 그린인지 확인해 보세요.알림: 형식적으로 테스트를 보내는 것이 아니라'form[action='/signup']'이 존재하는지 테스트하는 데 착안한다.
  test "invalid signup information" do
    get signup_path
    assert_no_difference 'User.count' do
      post users_path, params: { user: { name: "",
                                  email: "user@invalid",
                                  password: "foo",
                                  password_confirmation: "bar" } }
    end
    assert_template 'users/new'
    assert_select 'div#error_explanation'
    assert_select 'div.field_with_errors'
    assert_select 'ul' do
      assert_select 'li', 'Name can\'t be blank'
      assert_select 'li', 'Email is invalid'
      assert_select 'li', 'Password confirmation doesn\'t match Password'
      assert_select 'li', 'Password is too short (minimum is 6 characters)'
    end
  end

7.4.2
연습하다
컨트롤러로 이동해서 문자열 내의 공식 전개(4.2.2)로 기호를 호출해 보십시오.예를 들어 "#: success}"같은 코드를 실행하면 어떤 값을 되돌려줍니까?확인해 보세요.
방금 연습에서 시도한 결과를 참고하여 리스트 7.30의 플래시 결과가 어떠한지 고려해 보세요.
1

>> "#{:success}"
=> "success"


>> flash = { success: "It worked!", danger: "It failed." }
=> {:success=>"It worked!", :danger=>"It failed."}
>> "#{flash[:success]}"
=> "It worked!"
>> "#{flash[:danger]}"
=> "It failed."
>> 

7.4.3 훈련
1. Rails 콘솔을 사용하여 새 사용자가 실제로 생성되었는지 다시 확인합니다.결과는 목록 7.32일 것이다.

>> User.find_by(email: "[email protected]")
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."email" = ? LIMIT ?  [["email", "[email protected]"], ["LIMIT", 1]]
=> #<User id: 1, name: "Rails Tutorial", email: "[email protected]", created_at: "2019-04-13 05:30:47", updated_at: "2019-04-13 05:30:47", password_digest: "$2a$10$gr18EYrgzmjFoagV/HyQXuXMbr7DZgH5Y.kPFwBibpn...">

7.4.4
연습하다
7.4.2에 설치된 플래시 테스트를 적어 주세요.얼마나 세밀한 테스트를 할지는 자네에게 맡기겠네.목록 7.34에 최소한의 템플릿이 준비되어 있으므로 참조(FILL IN 섹션을 적절한 코드로 바꾸면 완료됨).참고로 교재에 대한 테스트는 고장나기 쉽다.글의 양이 적은 플래시 열쇠라도 마찬가지다.필자는 항상 플래시가 비어 있는지 테스트할 뿐이다.
본고에서도 플래시용 HTML(리스트 7.31)은 읽기 어렵다고 지적했다.더 쉽게 읽을 수 있는 리스트 7.35 코드로 변경해 보세요.변경이 끝난 후 테스트 세트를 실행하여 정상적으로 작동하는지 확인하세요.또한 이 코드에서는 Rails의 컨텐츠가나는'tag'이라는 조수를 사용한다.
목록 7.28의 리셋 줄에 대해 논평을 하면 테스트가 실패했음을 확인합니다.
명세서 7.28, @user.save 부분을 가짜로 바꿉니다. (오류가 삽입되었다고 가정하십시오.)이때, assert어떻게 difference 테스트에서 이 오류를 검출합니까?테스트 코드를 다시 한 번 고려해 주세요.
test/integration/users_test.rb

  test "valid signup information" do
    get signup_path
    assert_difference 'User.count', 1 do
      post users_path, params: { user: { name:  "Example User",
                                         email: "[email protected]",
                                         password:              "password",
                                         password_confirmation: "password" } }
    end
    follow_redirect!
    assert_template 'users/show'
    assert_not flash.empty?
  end
end

@user.save 설명 중 오류 알림


ec2-user:~/environment/sample_app (sign-up) $ rails t
Running via Spring preloader in process 23008
Started with run options --seed 15913

 FAIL["test_invalid_signup_information", UsersSignupTest, 0.48565702699124813]
 test_invalid_signup_information#UsersSignupTest (0.49s)
        expecting <"users/new"> but rendering with <[]>
        test/integration/users_signup_test.rb:13:in `block in <class:UsersSignupTest>'

 FAIL["test_valid_signup_information", UsersSignupTest, 0.4982957169995643]
 test_valid_signup_information#UsersSignupTest (0.50s)
        "User.count" didn't change by 1.
        Expected: 1
          Actual: 0
        test/integration/users_signup_test.rb:21:in `block in <class:UsersSignupTest>'

  18/18: [==============================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.54846s
18 tests, 34 assertions, 2 failures, 0 errors, 0 skips

User.count"didn't change by 1. 어떤 이유로save가 없기 때문에user.count는 1을 추가하지 않고 오류가 됨

좋은 웹페이지 즐겨찾기