Rails 라우팅 정의에서 필요한 모델의 레코드를 자동으로 가져오는 시나리오
경로
Rails3에서 기본적으로 지금까지 안정된 형식으로 Rails에서 응용 개발한 프로그래머들 사이에는 이미 완전히 고정되었다.여러분, 루스.rb 써요?특히 ROI 컨텍스트에서'자원'의 라우팅 설계를 의식적으로 진행한다면 누가 책임을 지든 똑같은 성과가 당신의 실감을 돕는다.
뭐?
다만, 루트가 정의한 경로에 포함된: id에 관해서는 어떻게 된 것 같습니까?예를 들어, Rails의 API 문서http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-resources를 보면 다음과 같은 설명이 있습니다.# (例1)
# resources :photos
# ↑このように定義した場合
GET /photos
GET /photos/new
POST /photos
GET /photos/:id
GET /photos/:id/edit
PATCH/PUT /photos/:id
DELETE /photos/:id
# (例2)
# resources :photos do
# resources :comments
# end
# ↑このように定義した場合
GET /photos/:photo_id/comments
GET /photos/:photo_id/comments/new
POST /photos/:photo_id/comments
GET /photos/:photo_id/comments/:id
GET /photos/:photo_id/comments/:id/edit
PATCH/PUT /photos/:photo_id/comments/:id
DELETE /photos/:photo_id/comments/:id
(예1) 측면: id는 Photo 모델의 id를 가리키지만, 플러그인 자원(예2)에서 id는Comment 모델의 id를 가리킨다.응, 정말 귀찮아.
제가 지금 모델모델모델의column열을 가리키는 상황은 모델입니다.나는 그것을 콜럼버스로 하는 것이 비교적 좋다고 생각한다.자원이 끼워 넣든 안 끼워 넣든 예를 들면 포토id 및:commentid 따위name을 사용하면 거의 모든 패턴이 유일하며 사고를 줄이는 것도 좋다.
before_action :set_xxxx
Rails와 접촉하면 자주 볼 수 있어요.컨트롤러:set-user라는 방법이 있습니다. 쇼와 편집이 하고 싶은 User 모형을 미리 넣은 음반의 편리한 기구입니다.Rails의 scaffold에서 생성된 코드에도 있기 때문에 궤도상의 표준 기구라고 할 수 있다.
방금 루트에서'포토 모델의 id 열이라면 언제든지 포토 id로 사용하는 것이 좋다'고 말했다.이렇게 되면 어떤 컨트롤러든 사용할 수 있다def set_photo
@photo = Photo.find(params[:photo_id])
end
이렇게 쓰면 매우 편리하다.id:포토id를 흔들면 공통화가 불가능합니다.그래서 저는'기본적으로 모델 컬럼으로 준비하세요'라고 생각했어요.
너는 공유 경찰이 되고 싶니?
하면, 만약, 만약...그럼 저는 앞으로 "네, 예전에도 댓글을 달았는데 이렇게 하는 게 좋을 것 같아서 이번 라우팅 정의도 이런 식으로 했으면 좋겠다"는 생각을 해봅니다.매번 댓글을 달면 이런 댓글을 계속 쓰는 루트 경찰이 되고 싶다는 게 정말 힘든 미래다.
그럼 어떡하지?편리하다
편리함 고려
"이게 편해요!"만약'확실하다'면, 사람들은 그곳으로 흐르기 쉽다.먹이로 낚는 스타일.
드디어 주제다. 그럼'라우팅 정의를 잘하면 자동으로 음반을 얻을 수 있다'는 건 어떨까?투박한 실크로 시험해 보았다.class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :auto_set
def auto_set
params.select { |key, _| key =~ /__/ }.each do |key, value|
model_name, column_name = key.split('__')
model = Object.const_get(model_name.capitalize)
record = model.find_by([[column_name, value]].to_h)
instance_variable_set("@#{model_name}", record)
end
end
end
Application Controller의 autoset 방법 준비 before액션에 미리 로그인합니다.
파람스@user
에 데이터가 전송되면photo__id: 3
포토의 id가 3의 기록을 대체한다.마찬가지로 @photo
지나간 후user__name: 'june29'
User의name는june29의 기록을 자동으로 대입합니다.
만약 이런 구조가 된다면, 루트 정의도 다음과 같이 되고 싶지 않겠는가...?resources :photos, param: :photo__id
resources :users, param: :user__name
또한 밑줄 2개를 구분자로 사용하는 것은 하나의 방안일 뿐, 기존 Rails가 기존의 루트 정의를 적용하는 데 방해가 되지 않는다면 된다는 것은 대체적인 의도이다.
계속 고려하다
아이디로 이전 예시를 찾을 때도find.by(id)를 원하기 때문에find(id)의 행동과 다르기 때문에 좋지 않다고 생각합니다.
여러분의 현장에서 경로가 정의한 치안이 좋습니까?만약'우리 집은 이렇다','나는 이렇게 생각한다'가 있다면, 반드시 나에게 알려주세요.
Reference
이 문제에 관하여(Rails 라우팅 정의에서 필요한 모델의 레코드를 자동으로 가져오는 시나리오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/june29/items/29966cd6f445947a8a0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# (例1)
# resources :photos
# ↑このように定義した場合
GET /photos
GET /photos/new
POST /photos
GET /photos/:id
GET /photos/:id/edit
PATCH/PUT /photos/:id
DELETE /photos/:id
# (例2)
# resources :photos do
# resources :comments
# end
# ↑このように定義した場合
GET /photos/:photo_id/comments
GET /photos/:photo_id/comments/new
POST /photos/:photo_id/comments
GET /photos/:photo_id/comments/:id
GET /photos/:photo_id/comments/:id/edit
PATCH/PUT /photos/:photo_id/comments/:id
DELETE /photos/:photo_id/comments/:id
Rails와 접촉하면 자주 볼 수 있어요.컨트롤러:set-user라는 방법이 있습니다. 쇼와 편집이 하고 싶은 User 모형을 미리 넣은 음반의 편리한 기구입니다.Rails의 scaffold에서 생성된 코드에도 있기 때문에 궤도상의 표준 기구라고 할 수 있다.
방금 루트에서'포토 모델의 id 열이라면 언제든지 포토 id로 사용하는 것이 좋다'고 말했다.이렇게 되면 어떤 컨트롤러든 사용할 수 있다
def set_photo
@photo = Photo.find(params[:photo_id])
end
이렇게 쓰면 매우 편리하다.id:포토id를 흔들면 공통화가 불가능합니다.그래서 저는'기본적으로 모델 컬럼으로 준비하세요'라고 생각했어요.너는 공유 경찰이 되고 싶니?
하면, 만약, 만약...그럼 저는 앞으로 "네, 예전에도 댓글을 달았는데 이렇게 하는 게 좋을 것 같아서 이번 라우팅 정의도 이런 식으로 했으면 좋겠다"는 생각을 해봅니다.매번 댓글을 달면 이런 댓글을 계속 쓰는 루트 경찰이 되고 싶다는 게 정말 힘든 미래다.
그럼 어떡하지?편리하다
편리함 고려
"이게 편해요!"만약'확실하다'면, 사람들은 그곳으로 흐르기 쉽다.먹이로 낚는 스타일.
드디어 주제다. 그럼'라우팅 정의를 잘하면 자동으로 음반을 얻을 수 있다'는 건 어떨까?투박한 실크로 시험해 보았다.class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :auto_set
def auto_set
params.select { |key, _| key =~ /__/ }.each do |key, value|
model_name, column_name = key.split('__')
model = Object.const_get(model_name.capitalize)
record = model.find_by([[column_name, value]].to_h)
instance_variable_set("@#{model_name}", record)
end
end
end
Application Controller의 autoset 방법 준비 before액션에 미리 로그인합니다.
파람스@user
에 데이터가 전송되면photo__id: 3
포토의 id가 3의 기록을 대체한다.마찬가지로 @photo
지나간 후user__name: 'june29'
User의name는june29의 기록을 자동으로 대입합니다.
만약 이런 구조가 된다면, 루트 정의도 다음과 같이 되고 싶지 않겠는가...?resources :photos, param: :photo__id
resources :users, param: :user__name
또한 밑줄 2개를 구분자로 사용하는 것은 하나의 방안일 뿐, 기존 Rails가 기존의 루트 정의를 적용하는 데 방해가 되지 않는다면 된다는 것은 대체적인 의도이다.
계속 고려하다
아이디로 이전 예시를 찾을 때도find.by(id)를 원하기 때문에find(id)의 행동과 다르기 때문에 좋지 않다고 생각합니다.
여러분의 현장에서 경로가 정의한 치안이 좋습니까?만약'우리 집은 이렇다','나는 이렇게 생각한다'가 있다면, 반드시 나에게 알려주세요.
Reference
이 문제에 관하여(Rails 라우팅 정의에서 필요한 모델의 레코드를 자동으로 가져오는 시나리오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/june29/items/29966cd6f445947a8a0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
"이게 편해요!"만약'확실하다'면, 사람들은 그곳으로 흐르기 쉽다.먹이로 낚는 스타일.
드디어 주제다. 그럼'라우팅 정의를 잘하면 자동으로 음반을 얻을 수 있다'는 건 어떨까?투박한 실크로 시험해 보았다.
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :auto_set
def auto_set
params.select { |key, _| key =~ /__/ }.each do |key, value|
model_name, column_name = key.split('__')
model = Object.const_get(model_name.capitalize)
record = model.find_by([[column_name, value]].to_h)
instance_variable_set("@#{model_name}", record)
end
end
end
Application Controller의 autoset 방법 준비 before액션에 미리 로그인합니다.파람스
@user
에 데이터가 전송되면photo__id: 3
포토의 id가 3의 기록을 대체한다.마찬가지로 @photo
지나간 후user__name: 'june29'
User의name는june29의 기록을 자동으로 대입합니다.만약 이런 구조가 된다면, 루트 정의도 다음과 같이 되고 싶지 않겠는가...?
resources :photos, param: :photo__id
resources :users, param: :user__name
또한 밑줄 2개를 구분자로 사용하는 것은 하나의 방안일 뿐, 기존 Rails가 기존의 루트 정의를 적용하는 데 방해가 되지 않는다면 된다는 것은 대체적인 의도이다.계속 고려하다
아이디로 이전 예시를 찾을 때도find.by(id)를 원하기 때문에find(id)의 행동과 다르기 때문에 좋지 않다고 생각합니다.
여러분의 현장에서 경로가 정의한 치안이 좋습니까?만약'우리 집은 이렇다','나는 이렇게 생각한다'가 있다면, 반드시 나에게 알려주세요.
Reference
이 문제에 관하여(Rails 라우팅 정의에서 필요한 모델의 레코드를 자동으로 가져오는 시나리오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/june29/items/29966cd6f445947a8a0a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Rails 라우팅 정의에서 필요한 모델의 레코드를 자동으로 가져오는 시나리오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/june29/items/29966cd6f445947a8a0a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)