show api 작성시 생성된 @article을 instance 변수로 만드는 이유가 있나요??
강의를 다 듣고나서 공식문서를 다시 보다, 문득 궁금한점이 생겨 질문 남겨봅니다.
예를 들어 강의에서 작성하는 다음 코드가 있었는데,
def show
@article = Article.find(params[:id])
end이때 article 앞에 @을 추가하여 instance 변수로 만드는 이유가 있나요?
instance 변수로 만들었다는 것은, 동일한 class 내의 다른 method에서 참조가 가능해지는데…?이는 좋지 못하다고 생각됩니다만? 혹 이렇게 선언하는 이유가 있을까요?
Spring진영으로 생각하면 다음과 같은 코드를 작성하는 느낌인데??
public class ArticleQueryApiV1 {
private ArticleDto article;
@GetMapping("/articles")
public ResponseEntity<BaseResponse<ArticleDto>> show() {
ArticleDto article = articleQueryUseCase.lookupFirst()
this.article = article; // 이 부분을 어떠한 이유에서 수행하는???
return ResponseEntity.ok().body(new BaseResponse<>(articles));
}
}Spring만 공부해왔던 저에게는 다소 생소한 "코드"라 생각되어 질문 남겨봅니다!!!
Answer 1
1
안녕하세요, zbqmgldjfh님.
단순한 API만 제공하는 Controller였다면 instance 변수로 선언하지 않아도 되는게 맞아요.
가이드의 경우에는 View까지 그려줘야 하는데 View가 결국은 Controller를 통해서 그려지기 때문에 View 내부에서 article의 데이터에 접근이 필요한 경우에 위와 같이 선언해서 가져다 쓰는 용도로 쓰이고 있어요.
그러지 않고 사용한다고 하면 View에서 API콜을 따로 해서 필요한 값을 받아가는 방식이 있을텐데 이 방식이 Ruby on Rails에서는 일반적인 사용패턴이라고 알고 있어요.
언급하신 다른 메소드가 참조하는 좋지 못한 방식이라는 점이 Rails에서는
before action으로 미리 객체의 값을 넣어두고 메소드에서는 참조만 하게 해서 동일 코드를 제거하는 효과를 가지기도 해요.
before_action :set_article
def set_article
@article = Article.find_by(id: 123)
end
def foo
"Title is #{@article.title}"
end
def bar
"Description is #{@article.description}"
end
혹시 다음 강의 찍게되면 마우스좀 치워주세요
0
48
0
스타업 클라우드 질문
0
106
2
vscode를 설치했는데 myapp폴더가 없어요!
0
92
1
토스페이먼츠 크롬에서는 되는데 사파리나 엣지 브라우저에서 나오지 않을 경우
0
107
2
커서에서 해결책을 못 찾을 경우 ㅠㅠ
0
98
2
error 메시지 빨간색 창은 레일즈로 한 화면에서만 뜨는건가요?
0
98
2
SSL 관련 이슈 해결
0
49
1
tidewave 로 인프런을 구현 해보고 있는데요.
0
77
2
shadcn 스타일 적용
0
83
2
kamal setup시 오류
0
86
2
scaffold 생성 시 테일윈드
0
64
2
도커를 이용한 배포가 에러가 굉장히 많이 납니다. 혹시 깃허브 이용
0
100
2
루비설치중문제
0
48
1
ubuntu 설치시 문제..
0
69
2
지금 시점에서 루비온레일즈를 배우는게 여전히 유효할까요?
0
133
2
윈도우 환경에서 surf 작동안되는 경우..
0
96
2
모델 생성 중 정지 현상
0
87
1
surf 명령어 입력 안되는 문제
0
100
2
kamal deploy 실행시 오류
0
90
2
레일즈를 사용하던 기업들이 주 언어를 바꾼 이유가 궁금합니다
0
152
1
안녕하세요 강사님 질문이 있어 글을 작성합니다.
0
118
1
강의 감사합니다.
0
132
1
kamal로 배포해보기 챕터는 아직 업데이트 전인가요?
0
170
1
tailwindcss code generator 링크가 잘못된 것 같아요.
0
249
1

