루비온레일즈 라우터 질문입니다.
조회수 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
이문서에 자세히 나와있습니다
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력