rails 동적 설정으로 scope를 설정하고 싶어요.

8856 단어 Rails

개시하다


모델에는 Rails로 역할 영역을 쓰지만 역할 영역의 수가 너무 많습니다.
그래서 범위를 동태적으로 정의할 수 있다면 스스로 해 보겠다고 생각했다.

구체적 예


구체적인 예로 문장에 언어 설정이 있다고 가정하자.
모델이 이런 느낌이에요.

그리고 이 랑은 인덱스형으로 엔um을 사용합니다.
그래서 모델스/article.대상
article.rb
class DataCollect < ApplicationRecord
    enum lang: {ja: 0, en: 1, ar: 2, de: 3,el: 4, eo: 5, es: 6, fr: 7}
end
이런 느낌으로.
이렇게 하면article을 만들 때lang을 설정하면 그 글의 언어를 알 수 있다.

scope 만들기


예를 들면 스코프를 만들 때.
Article.ja.all
일본에서 글을 쓸 수 있도록 모델스/article을 사용하세요.달성
scope :ja, -> {where(lang: :ja)}
이렇게 하면 실현할 수 있다.
그러나 이번 예와 같이 일곱 가지 언어가 있다
models/article.rb
scope :ja, -> {where(lang: :ja)}
scope :en, -> {where(lang: :en)}
scope :ar, -> {where(lang: :ar)}
scope :de, -> {where(lang: :de)}
scope :el, -> {where(lang: :el)}
scope :eo, -> {where(lang: :eo)}
scope :es, -> {where(lang: :es)}
이렇게 쓰면 거추장스러울 것이다.
더 늘리면 더 방해가 되니까 이걸 더 짧게 쓰고 싶어요!

class_eval 썼어요.


아무튼 클라스.eval을 사용하여 Artical의 모델에 scope를 정의합니다.
사용법이 이렇게 된 느낌.
Article.class_eval { scope ja, -> {where(lang: ja)}
이렇게 하면 scope의 설정을 할 수 있고 그 다음에 배열 순환을 하면 완성된다.
Lang = [ja, en, ar, de, el, eo, es, fr]

Lang.each do |l|
  Article.classs_eval { scope l, -> {where(lang: l)}
end 
이렇게 하시면 됩니다.

다시 해봐.


언어의 파일은config/localles에 있고, 그 파일의 정의scope를 보고 싶습니다.
뭐랄까
예를 들어config/localles
en.yml
ja.yml
en.yml
만약 이런 서류가 있다면 보고 엔자, 엔의 범위를 만들 것이다.
config/localles의 파일 이름을 얻기 위해
Dir.chdir("/mnt/c/users/owner/desktop/app_name/config/locales")
lang = Dir.glob("*").map {|l| l.match(/../)[0] }
이렇게 하면 config/localles의 파일 이름을 얻을 수 있습니다.
이렇게 하면 config/localles에서 언어 파일의 언어 범위를 만들 수 있습니다
전체를 완성하는 것은 여기에 있다.

class Article < ApplicationRecord
    enum lang: {ja: 0, en: 1, ar: 2, de: 3,el: 4, eo: 5, es: 6, fr: 7}
end




Dir.chdir("/mnt/c/users/owner/desktop/latest_news/config/locales")
lang = Dir.glob("*").map {|l| l.match(/../)[0] }

lang.each do |l|
    Article.class_eval { scope l, -> {where(lang: l)}}
end 
오히려 이해가 안 되네요(웃음)
끝맺다
메리 크리스마스.

좋은 웹페이지 즐겨찾기