rails 플러그인을 어떻게 씁니까
첫 번째 단계는 프로젝트 디렉터리에 새 플러그인을 만들고 실행하기
rails generate plugin HelloWorld
이 명령은 다음 디렉토리 파일을 생성합니다.
create vendor/plugins/hello_world
create vendor/plugins/hello_world/MIT-LICENSE
create vendor/plugins/hello_world/README
create vendor/plugins/hello_world/Rakefile
create vendor/plugins/hello_world/init.rb
create vendor/plugins/hello_world/install.rb
create vendor/plugins/hello_world/uninstall.rb
create vendor/plugins/hello_world/lib
create vendor/plugins/hello_world/lib/hello_world.rb
invoke test_unit
inside vendor/plugins/hello_world
create test
create test/hello_world_test.rb
create test/test_helper.rb
이 안에서 비교적 중요한 파일은 바로 init이다.rb 및 lib/helloworld.rb, 플러그인이 불러올 때 init.rb는 먼저 불러오고 초기화되며lib는 코드 라이브러리를 실행합니다.
2단계, lib에서 hello 편집world.rb 파일, Hello World 출력을 위한 방법 정의say
hello_world.rb:
module HelloWorld
def say
p 'Hello World!'
end
end
세 번째 단계는 플러그인이 완성되었습니다. 다음은 모델에서 이 플러그인을 사용하십시오.init.rb 파일에 추가
init.rb:
ActiveRecord::Base.send(:include, HelloWorld)
이렇게 하면 모든 모델이 HelloWorld에 섞여있고 say 방법도 모델의 실례적인 방법이 된다.
(이렇게 하면ActiveRcord:Base에HelloWorld 모듈이 섞이고 모델은ActiveRecord::Base에 계승되기 때문에 모델은HelloWorld의 정적 방법을 직접 호출할 수 있습니다.send가 보낸 메시지는 프로그램이 실행될 때 변할 수 있고 send는module나 클래스의private 방법을 열 수 있어 더욱 유연하게 사용할 수 있습니다.)
model에서 사용, post.rb:
class Post < ActiveRecord::Base
end
콘솔에서 결과를 보려면 다음과 같이 하십시오.
1.8.7 :001 > Post.new.say
"Hello World!"
=> nil
문제 없어요!간단한 플러그인 하나로 완성되었지만 Hello World의 방법은 모든 모델에 열려 있습니다. 만약 그렇지 않다면 이렇게 쓸 수 있습니다.
hello_world.rb:
module HelloWorld
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def hellolize
include HelloWorld::InstanceMethods
end
end
module InstanceMethods
def say
p 'Hello World!'
end
end
end
(HelloWorld 모듈이include일 때 방법included가 호출되고 혼합된 클래스의 이름이 전송되며 extend 방법이 호출되면 ClassMethods 모듈의 방법은 혼합된 클래스의 방법이 되어 바로 호출될 수 있습니다. Hellolize 방법이 호출될 때 InstanceMethods는 혼합된 클래스의 실례적인 방법이 됩니다. 이렇게 하면 어느 모델에서say 방법을 사용하고 싶은지 장점이 있습니다.어느 모델에서hellolize 방법을 호출하면 방법의 안전성을 확보한다)
init.rb:
ActiveRecord::Base.send(:include, HelloWorld)
model에서 사용, post.rb:
class Post < ActiveRecord::Base
hellolize
end
콘솔에서 결과를 보려면 다음과 같이 하십시오.
1.8.7 :001 > Post.new.say
"Hello World!"
=> nil
이상은 실현 과정일 뿐 실제 상황에 따라 중복 기능 코드를 플러그인으로 작성해서 사용할 수 있다.
물론 완전한 플러그인은 완전한 검증과 테스트를 가지고 있으며, 이 예는 순전히 연습용으로 제공되며, 참고로만 제공된다.
여기에 비교적 좋은 예가 하나 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
새로운 UI의 Stripe Checkout을 Rails로 만들어 보았습니다.Stripe의 옛 디자인인 Stripe의 구현 기사는 많이 있습니다만, 지금 현재의 디자인에서의 도입 기사는 발견되지 않았기 때문에 투고합니다. Stripe의 체크아웃을 stripe의 문서라든지 stackoverfl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.