루비온레일즈 라우터 질문입니다.

조회수 1878회

루비온레일즈 공부하는 중입니다. 책을 보고 예제를 따라 하는 중 궁금한 게 생겨 질문합니다. 지금 라우터에 resource :name 을 등록하면 정의된 메소드를 사용할 수 있다고 하는데 어떤 식으로 작동하는 질 잘 모르겠습니다.

컨트롤러 코드는 아래와 같습니다. 버튼을 클릭하면 Post디비에 1부터 10까지 넣습니다. 그리고 그것을 인덱스에서 보여주는 식인데요.

class HomeController < ApplicationController


  def index 
    @posts =Post.all



  end 


  def write
        1.upto(10) do |s|
      local = "/home/ubuntu/workspace/app/views/home/#{s}.html.erb"
      if not File.exists?(local)
      postDB = Post.new
      postDB.title = s
      puts s
      postDB.save   

      aFile = File.new( local, 'w')
      if aFile
        puts aFile.syswrite("<h1>")
        puts aFile.syswrite(s)  
        puts aFile.syswrite("</h1>")

        aFile.close
      end
      else
        puts 'Unable open file'
      end#else



     end # 1 to 10 
     redirect_to "/home/index"

  end
end # end class

코드를 실행하면 디비에 1부터 10까지 데이터가 쌓이고 아래와 같이 html파일도 생깁니다.

이미지

router.rb

Rails.application.routes.draw do
  get 'home/index'
  post 'home/write'

  get 'post/:2' => 'home#art#2'
  get 'post/:3' => 'home#3'
  resources :post

  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".

  # You can have the root of your site routed with "root"
   root 'home#index'

end

아래는 뷰에서 보여주는 화면인데요. 여기서 3번째 show를 누르면 제가 원하는 대로 3.html화면을 보여줍니다. 라우터에 등록을 해놨으니깐요.

이미지

하지만 등록하지 않은 다른 show를 누를 경우 (3번 제외 ) 아래와 같은 에러 메시지가 뜹니다.

이미지

여기서 궁금한 것이 2가지 있습니다. 우선 라우터에 resource :post 즉 post 데이터베이스를 등록하여 생기는 이점을 어떻게 사용할지 궁금합니다.. 예를 들면 지금 제가 1 부터 10 까지의 html를 보여주기 위해서는 일일이 다 get 'post/:1' => 'home#1' get 'post/:2' => 'home#2' 이런식으로 10까지 설정을 해줘야 하나요?

그리고 home/art라는 임의의 파일을 생성했을 때 이안에 있는 2.html.erb는 라우터 설정을 어떻게 해야 보여줄 수 있나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • get 'post/:2' => 'home#art#2'
    get 'post/:3' => 'home#3'
    resources :post
    

    resources :post 이 코드때문에 자동으로 스캐폴딩이 됬습니다

    rails 명령어로 만드신거라면 자동으로 PostController가 있을테고 아니라면 보이는 라우트 경로에 따라 직접 작성하셔야 되요.

    제 생각엔 직접 만들려면 귀찮으니까 다시 스캐폴딩으로 만드시는걸 추천드려요

    이미 지정되어있는 파일이아닌 다른 파일을 렌더링하려면 render 함수를 이용하시면 됩니다

    render template: "products/show"
    

    이런 형식으로 사용이 가능하다네요

    http://guides.rubyonrails.org/layouts_and_rendering.html

    이문서에 자세히 나와있습니다

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)