2016-06-17 2 views
0

내 애플리케이션에는 account에 사용자에게 표시해야하는 다양한 고유 메시지 (message_templates)가 있습니다. 예를 들어 한 계정에서 새 게시물이 만들어지면 "게시물을 만들어 주셔서 감사합니다!"라는 메시지가 표시 될 수 있습니다. 또 다른 계정은 "게시물이 성공적으로 생성되었습니다!"라고 말하고 싶을 수도 있습니다.레일 : 애플리케이션 종속 데이터 유지

특정 시간에만 트리거되는 이러한 인앱 message_templates 세트가 있습니다. 따라서 각 계정은 값이 같고 값이 다를 것입니다.

account = Account.create! 
MessageTemplate.create(account: account, slug: "post_created_thank_you", body: "Thank you for creating the post!") 
... 
# Can change the body column but nothing else. 

def PostsController < ApplicationController 
    def create 
    # create the post... 
    @thank_you_message = current_account.message_templates.find_by(
     slug: "post_created_thank_you" 
    ) 
    end 
end 

내가 응용 프로그램에 기능을 추가 해요로

그러나, 나는 때때로 내가 다른 message_template를 추가 할 것을 발견하고 나는이 템플릿은 현재의 모든 계정에 생성되어 있는지 확인해야합니다.

account에 다양한 message_templates이 있는지 확인하기 위해 Rails 마이그레이션을 사용하려고했지만 실제로는 응용 프로그램 데이터 변경이 아닌 DB 스키마 변경이 필요합니다.

나는 또한 rake db:seed을 보았습니다.하지만 이것은 처음에는 DB를 시드하기위한 것이지 업데이트를 유지하는 것이 아닙니다.

한 가지 해결책은 새 템플릿 메일을 추가 할 때마다 수동으로 실행하는 레이크 작업을 만드는 것입니다. 조금 어색해 보입니다.

내가 정말로 원하는 것은 데이터를 위해 만들어진 마이그레이션입니다. 이것은 공통적 인 문제처럼 보입니다. 이것을 구현하는 표준 방법이 있습니까? 그렇지 않으면 데이터 마이그레이션을 구현하는 보석을 작성하게 될 것입니다.

답변

0
당신은 이전에 당신이 시드 파일의 예에서 할 것 같은 방법으로 데이터를 생성 할 수 있습니다

:

def up 
    Account.each do |account| 
    MessageTemplate.create(account: account, slug: "post_created_thank_you", body: "Thank you for creating the post!") 
    end 
end 
def down 
    MessageTemplate.where(slug: "post_created_thank_you").delete_all 
end 

또는 더 나은 아이디어는 빨리 실행되도록 SQL 삽입에 위의를 설정하는 것입니다 ...

+0

나는 데이터를 마이그레이션 자체에 넣을 수 있다는 것을 알고 있지만, 많은 사람들이 그렇게하지 않는 것이 좋습니다. 마이그레이션은 이제 비즈니스 로직 (예 : 데이터)을 가지며, 중단없이 마이그레이션을 제거/제거 할 수 없다는 것을 알게되었습니다. 핵심 앱 기능. 나는 당신이 추천 한 것과 정확히 똑같은 것을하고 놀고 있는데, 먼저 깨끗한 접근법이 있는지 알고 싶다. –

+0

당신이 무슨 일을 하든지, 당신은 여전히 ​​데이터를 가지게 될 것입니다 ... 그리고 당신의 prod db에 그것을 얻기 위해 여전히 마이그레이션에서 실행될 필요가 있습니다. 다른 해결책은 그 사실을 모호하게하는 것입니다. 케익을 슬라이스하는 다른 방법이 있습니다 ...하지만 그들은 모두 "나는 마이 그 레이션을 실행하고 그것은 db에 데이터를 넣는 것을 실행합니다." –

관련 문제