2011-04-06 4 views
0

간단 함과 길이는 변명하십시오.하지만 이름, 이메일 및 급여 속성이있는 사용자 테이블이있는 테스트 앱이 있습니다. 나는이 데이터의 보고서를 재량에 따라 특정 사용자, 즉 단추를 클릭 할 때 보내는 보고서를 작성했습니다. 내 버튼은 link_to를 사용하여 만들어지고 내 주 users_controller에서 액션을 호출합니다. 그러면 메인 사용자 컨트롤러가 메일러 작업을 호출합니다. (나는 단지 그것이 의미가 있었기를 바란다). 그것은 다음과 같이 보이고 나가 희망하는대로 다만 일하고있다; user_mailer.rb 파일에서올바르게 했습니까? link_to가있는 컨트롤러에서 작업을 호출하십시오.

def sendemail 
@user = User.find(params[:id]) 
UserMailer.welcome_email(@user).deliver 
redirect_to user_path(@user) 
flash[:notice] = 'Email has been sent!' 
end 

: (비계 발생기에 의해 생성) 내 users_controller에서

: 난 그냥이 이런 식으로 뭔가를 할 수있는 올바른 방법 있는지 알고 찾고 있어요

사용자 show.html.erb 페이지에서
def welcome_email(user) 
@user = user 
@url = "http://example.com/login" 
mail(:to => user.email, 
    :subject => "Welcome to My Awesome Site") 
end 

이 이메일이 전송되는 방식이다

<%= link_to "Send Email", sendemail_user_path(@user) %> 

을 내 모든 것이 (이 않는)가 제대로 실행되도록 routes.rb 파일 :

resources :users do 
member do 
get 'sendemail' 
end 

그래서, 모든이 말을하는 데, 그것은 그냥해야처럼 작동합니다. 나는 사용자의 show.html.erb 페이지를 클릭하여 내가 원하는 데이터와 차트를 표시 할 수 있으며, 재량에 따라이 데이터가 포함 된 해당 사용자에게 이메일을 보낼 수 있습니다. mailer.html.erb 파일. 전송 될 때 컨트롤러에서 지정한 메시지가 깜박이고 지정한대로 페이지가 나옵니다. 그래서 그것은 작동 중입니다. 나는 단지 이것을 알고 싶다. 이것은 일을하는 데 가장 권위있는 루비 방법인가?

답변

0

이 코드는 Rails Guides Action Mailer 예제와 매우 유사하므로 레일스 코드를 작성한다고 해보면 충분합니다.

또한 응용 프로그램이 훨씬 더 큰 규모로 발전한 경우 전자 메일 배달이 현재 스레드를 차단하지 못하도록 백그라운드 작업을 통해 전자 메일을 배달하는 것이 좋습니다.

그렇지 않으면 코드가 멋지게 보입니다. 물론, 직접 이메일을 보내기위한 전용 작업을하기보다는 컨트롤러에서 성공한 작업을 수행 한 후 이메일을 보낼 가능성이 큽니다. 예를 들어 성공적인 사용자 레코드 저장시 전자 메일을 보내는 welcome 작업이있을 수 있습니다.

+0

응답과 피드백에 감사드립니다. "현재 작업중인 스레드를 차단하지 못하도록 전자 우편 배달을 피하기 위해 백그라운드 작업을 통해 전자 메일을 전달하는 것을 고려하십시오" – FattRyan

+0

@FattRyan - 물론입니다. 따라서이 간단한 경우에는별로 필요하지 않지만 컨트롤러의 배열에있는 여러 사용자의 전자 메일을 보내려는 경우 해당 전자 메일을 모두 보낼 때까지 컨트롤러 메서드가 차단됩니다. 사용자가 Action Mailer가 이러한 이메일을 보내는 것을 기다리는 대신, 백그라운드에서 이메일을 보내고 컨트롤러가 최대한 빨리 사용자에게보기를 보내도록하는 것이 좋습니다. 필자의 요점은 사용자의 애플리케이션 반응성에 관한 것입니다. 또한 이메일에 오류가 발생하면 컨트롤러가 실패하기 때문에보기가 실패합니다. – McStretch

+0

또는 백그라운드에서 오류를 처리하고 표시되는 경우 이메일을 백그라운드에서 다시 보내시겠습니까? 일반적으로 주 코드 경로에서 장시간 작업을 가능하게 유지하는 것이 가장 좋습니다. 전자 우편의 경우 일반적으로 장면 뒤에서 보내고 모든보기 데이터를 즉시 사용자에게 보냅니다. 그걸 정리 해줄 수 있니? – McStretch

관련 문제