1. 멤버 라우팅의 경우 route.rb 파일에 다음과 같이 설정하자.


rake routes 를 실행하면 다음과 같이 render_index전에 id값을 입력받는 것을 알 수 있다.



2. 콜렉션 라우팅의 경우 route.rb 파일에 다음과 같이 설정하자.


rake routes 를 실행하면 다음과 같이 id없이 바로 render_index로 간다.






참고자료




Posted by 하남각목

인자

1. 액션

2. params

3. session

4. flash


예시

1. show 액션에 id는 12라는 params와 user_id는 5라는 session을 보냄

get :show, {:id => 12}, {:user_id => 5}


2. view 액션에 id는 9라는 params와 message는 "yay!"라는  flash를 보냄

get :view, {:id => 9}, nil, {:message => "yay!"}





참고자료

1. 레일스 가이드



Posted by 하남각목

1. \curl -#L https://get.rvm.io | bash -s stable --autolibs=3 --ruby

2. source ~/.rvm/scripts/rvm

3. rvm requirements

4. rvm install 1.9.3

5. rvm use 1.9.3 --default

6. rvm rubygems current

7. gem install rails





참고자료

1. RVM

2. Ayrton Araujo




'Ruby On Rails' 카테고리의 다른 글

데이터베이스 구조를 sql문으로 복사하기.  (0) 2013.05.18
Ruby TDD - Rspec 따라하기 11단계  (0) 2013.05.17
Ruby On Rails 세팅  (0) 2013.05.15
TDD - Running Test  (0) 2013.05.13
TDD - fixture  (0) 2013.05.13
HTML <a> 태그와 ERB의 link_to 변환  (0) 2013.05.02
Posted by 하남각목

Test를 실행해보자.

우선 첫번째 줄에 require 'test_helper'의 의미를 곱씹어보자.

  require 'test_helper'는 test_helper를 만족해야 한다는 건데,

  이 파일 안에는 모든 픽스쳐를 로드하라는 코드가 있다.





자, 그럼 1번줄에 의하여 모든 픽스쳐가 로드된 이후의 상황이다.

4~6번째 줄은 무조건 통과되는 테스트이고,

8~11번째 줄은 music 모델이 title없이 통과되면 실패하는 테스트이다.


  assert BOOL "something to say"

  BOOL이 true이면 테스트 통과. false이면 테스트 실패 & "something to say" 출력



다음과 같이 테스트를 실행할 수 있다.

  ruby -Itest 경로

  경로에는 test_helper.rb 파일이 포함되어야 한다.





참고자료

1. 레일즈 가이드




'Ruby On Rails' 카테고리의 다른 글

Ruby TDD - Rspec 따라하기 11단계  (0) 2013.05.17
Ruby On Rails 세팅  (0) 2013.05.15
TDD - Running Test  (0) 2013.05.13
TDD - fixture  (0) 2013.05.13
HTML <a> 태그와 ERB의 link_to 변환  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 901  (0) 2013.05.02
Posted by 하남각목

TDD - fixture

Ruby On Rails 2013.05.13 17:53

ROR에서 unit test란 model을 테스트 하는 것이다.

이때 우리는 fixture라는 테스트에 활용되는 샘플 데이터를 활용할 수 있다.


실제로 프로젝트폴더/test/unit/ 폴더에 있는 test 파일을 아무거나 열어보면 다음과 같은 코드를 볼 수 있다.

이는 그 테스트가 실행되기 전에 test_helper가 충족되야 한다는 것을 의미한다.



그럼 더 깊게 알아보기 위해 프로젝트폴더/test/test_helper.rb 파일을 열어보자

그 안에서 다음과 같은 코드를 볼 수 있다.


 위 코드에서 알 수 있듯이 테스트를 하기 전에 모든 fixtures가 load 된다는 것을 알 수 있다.



이번에는 fixture의 구조를 알아보자.  YAML으로 포맷되어 있다.(*.yml)

fixture 이름 밑에 key-value 형식으로 나열된다.



픽스쳐는 자동으로 로드된다.

이는 test_helper.rb 파일에서 자동으로 로드한다.


따라서 test 데이터베이스가 있어야 한다.

  rake db:test:load





참고자료

1. 레일즈 가이드




'Ruby On Rails' 카테고리의 다른 글

Ruby On Rails 세팅  (0) 2013.05.15
TDD - Running Test  (0) 2013.05.13
TDD - fixture  (0) 2013.05.13
HTML <a> 태그와 ERB의 link_to 변환  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 901  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 191  (0) 2013.05.02
Posted by 하남각목


ERB의 link_to와 HTML의 <a>태그를 비교해 보겠다.



HTML 코드

  <a href="path" class="some_class", style="some_css">링크</a>



ERB 코드

  <%= link_to "링크", path,  :class => "some_class", :style => "some_css" %>





그런데 HTML에서 <a> 태그 안에 다른 태그를 삽입하는 경우는 어떨까?

예를 들어 다음과 같은 코드를 보자.


HTML

  <a href="path" class="some_class", style="some_css">

      <i class="icon"></i> 아이콘

  </a>



이는 ERB로 이렇게 해석할 수 있다.

  <%= link_to path, :class => "some_class", :style => "some_css" do %>

      <i class="icon"></i> 아이콘

  <% end %>





참고자료




'Ruby On Rails' 카테고리의 다른 글

TDD - Running Test  (0) 2013.05.13
TDD - fixture  (0) 2013.05.13
HTML <a> 태그와 ERB의 link_to 변환  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 901  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 191  (0) 2013.05.02
Bootstrap - navbar-form  (0) 2013.05.01
Posted by 하남각목


코드번호 901에러


이 에러는 페이스북에 등록한 앱이 sandbox 모드일 때 일어난다.


 Sandbox Mode 란 앱 관계자만 페이스북을 통해서 접속이 가능한 모드이다.


이럴 때는 다음과 같이 sandbox 모드를 해제해준다.




그러면 다음과 같이 모두에게 접속가능해진다.






참고자료





'Ruby On Rails' 카테고리의 다른 글

TDD - fixture  (0) 2013.05.13
HTML <a> 태그와 ERB의 link_to 변환  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 901  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 191  (0) 2013.05.02
Bootstrap - navbar-form  (0) 2013.05.01
Omniauth - 페이스북 로그인  (0) 2013.05.01
Posted by 하남각목



코드번호 191 에러

이 에러는 페이스북 앱에서 Site URL이 잘못지정된 경우에 생기는 오류이다.

테스트시에는 localhost:3000과 같은 주소를 쓸 수 있으나 실제 서버에서 사용하려면 url을 적어줘야 한다.

  로컬에서 테스트할 때는 서버 url을 적을 시 같은 오류가 뜬다. 반드시 배포시에만 바꿔주자.



오류.


변경.


  서버 ip주소를 적어도 같은 오류가 생긴다. 반드시 도메인 네임을 써줘야 한다.

  아직 도메인을 구입하지 않았다면 /etc/hosts 에서 도메인을 지정해 줄 수 있다.




참고자료







Posted by 하남각목


navbar위에 navbar-form클래스를 이용해 로그인 폼을 만드는 방법이다.

다음 코드를 원하는 위치에 넣어주자.

 form_for의 클래스를 지정해 줄때는 :html => {:class => "navbar-form"} 으로 해준다.

 필드나 체크박스의 인자로 보내지는 모델의 원소는 html에서 name으로 변해 들어간다.

  예를 들어  :email 을 인자로 갖는 필드에는 user[email]로 이름이 지정된다.



다음은 결과이다.




참고자료





Posted by 하남각목


Omniauth를 이용한 페이스북 로그인을 알아보자.

개발자는 다음을 우선적으로 시행해야 한다.

  1. 페이스북에 앱을 등록해서 App ID와 App Secret을 얻어야한다.
  2. Website with Facebook Login을 사용한다고 설정한다.




다 됐다면 다음을 진행하자.
먼저 Gemfile에 다음 코드를 삽입한다.
  gem 'omniauth-facebook'



그 다음 'bundle install'을 실행하자.

그러면 자동으로 oauth2, omniauth, omniauth-oauth2, omniauth-facebook을 설치할 것이다.

 


그 다음 프로젝트폴더/config/initializers/devise.rb 파일에 다음 코드를 입력하자.


  require "omniauth-facebook"

  config.omniauth :facebook, "APP_ID", "APP_SECRET"



그 다음 devise에서 만들어놓은 user 모델에 다음 코드를 삽입하자.

  devise :omniauthable



그 다음 앱에 접속하면 다음과 같이 'Sign in with Facebook' 링크를 볼 수 있을 것이다.



지금 이 링크를 클릭하면 다음과 같은 에러를 볼 수 있는데,

이는 페이스북 인증이 성공적으로 이루어 졌을 시 불러질 콜백 메서드를 만들어 주지 않았기 때문이다.




이를 해결하기 위해 다음을 실행하자.

우선 프로젝트폴더/config/locales/routes.rb 파일에 다음 코드를 넣어주자.

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }




그 다음으로 프로젝트폴더/app/controllers/ 폴더에 users 폴더를 만든다.

그리고 프로젝트폴더/app/controllers/users/ 폴더에 omniauth_collbacks_controller.rb 파일을 만든다.

그러고 다음 코드를 넣어주자.




  페이스북 정보데이터 => request.env["omniauth.auth"]

  유저가 유효하면 로그인.

  그렇지 않으면 회원가입 폼으로 이동.




그 다음 프로젝트폴더/app/models/user.rb 파일에 다음 코드를 넣어주자.


  같은 이메일주소를 가진 회원이 없다면 새로 만든다.

  이때 이메일과 이름은 페이스북 정보를 이용하고 비밀번호는 랜덤으로 생성한다.



그 다음 프로젝트폴더/app/models/user.rb 파일에 다음 코드를 넣어주자.


 유저가 회원가입전에 생성됐을 때, 세션에서 이메일 정보를 가져온다.






참고자료

1. omniauth-facebook - Github

2. Facebook Authentication - Rails Cast

3. Adding Facebook Auth - Ruby On Rails Outsourcing 



Posted by 하남각목