Rails에서 activeadmin을 사용할 때 to_param을 id가 아닌 경우 처리
2332 단어 젬activeadmin루비Rails
쉽게 관리 화면을 만들 수 있을 뿐만 아니라, 어느 정도의 커스터마이즈에도 대응할 수 있습니다.
무엇을 하고 싶은가
Rails에서는 모델에
to_param
라는 메서드가 있으며 이를 덮어 쓰면 URL에 포함 된 :id
를 다른 열로 만들 수 있습니다.예를 들면 다음과 같이 하면
/events/:id/
의 id를 name 컬럼으로 할 수 있습니다.class Events < ApplicationRecord
def to_param
name
end
end
to_param의 덮어쓰기는 자주 한다고 생각합니다만, activeadmin에서의 대응 방법이 넷에서 찾아내기 어려웠기 때문에, 기사로 하려고 합니다.
무슨 일이 일어나는가
위와 같이 to_param을 덮어 쓰면 activeadmin은 어떻게됩니까?
activeadmin은 이제 모델 구조를 분석하여 자동으로 관리 화면을 만들 수 있습니다. 그 때문에
to_param
도 제대로 인식해 줍니다.그러나 덮어 쓴 상태에서 activeadmin에서 상세 화면이나 편집 화면을 보려고하면 오류가 발생합니다.
이것은,
admin/events
에 표시되는 「열람・편집・삭제」등의 링크가 to_param에 의해 admin/events/:name/
이 되고 있지만, 내부의 find
이나 where
에서는 id로 검색하고 있는 것에 귀착됩니다.해결책
ActiveAdmin.register의 파일에 약간의 옵션을 쓰는 것만으로 대응할 수 있습니다.
ActiveAdmin.register Event do
# ここから
controller do
def find_resource
scoped_collection.where(name: params[:id]).first!
end
end
# ここまで
end
읽고 있는 것만으로 이해할 수 있을 것 같습니다.
보통
where(id: params[:id])
가 되는 곳을 where(name: params[:id])
로 하는 것 뿐입니다.주의점
공식적으로는 다음과 같은 문언으로 주의점이 적혀 있습니다.
Note that if you use an authorization library like CanCan, you should be careful
to not write code like this, otherwise **your authorization rules won't be
applied**:
```ruby
ActiveAdmin.register Post do
controller do
def find_resource
Post.where(id: params[:id]).first!
end
end
end
이것은, 모델명이 아니고,
scoped_collection
(을)를 사용하지 않으면 admin의 권한 관리가 기능이 효과가 없어요. 그렇군요. 여러분도 조심하세요!
Reference
이 문제에 관하여(Rails에서 activeadmin을 사용할 때 to_param을 id가 아닌 경우 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kent_ear/items/0998e5848ee27c96814c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)