0

前書き: サービス オブジェクトの概念を誤解している可能性があり、別の実装を設計する必要があります。前もって感謝します。


SMS 確認用のサービス オブジェクトを作成します。ユーザーは次の場合に自分の行動を確認する必要があります。

  • 彼は電話番号を送信します (自分のプロフィールを更新します)。
  • 彼は取引を確認します。
  • 彼は他の重要な行動をとります。

通信スキームは次のとおりです。 ここに画像の説明を入力

コード:

profile_controller:

def update

  @profile.assign_attributes(profile_params)
  if @profile.valid?
    confirm = SmsConfirmationService.new({user: current_user,
                                          phone: profile_params["phone"],
                                          kind: :phone})
    confirm.confirm_phone
  else
    ...
  end

end

sms_confirmation_service:

class SmsConfirmationService

  attr_reader :status

  def initialize(params)
    @user = params[:user]
    @phone = params[:phone]
    @kind = params[:kind]
  end

  def create_pin
    pin = Pin.new(code: rand(0000..9999).to_s.rjust(4, "0"),
                  profile_id: @user.profile.id)
    pin.save

    send_sms(pin.code)
  end

  def send_sms(code)
    # call to SMS-provider API and check the status

    render_view
  end

  def render_view
    template = ActionView::Base.new(ActionController::Base.view_paths, {})

    if @kind == :phone
      template.render(file: 'confirmation/confirm_phone')
    end
  end

end

render_view メソッドに固執しました。「Missing template profile/update」が表示されますが、ログによると、テンプレートは次のようにレンダリングされます。

....
Rendered confirmation/confirm_phone.html.haml (6.7ms)
  (0.1ms)  begin transaction
  SQL (0.2ms)  INSERT INTO "pins" ("code", "profile_id", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["code", 7811], ["profile_id", 7], ["created_at", "2016-08-26 15:45:02.751384"], ["updated_at", "2016-08-26 15:45:02.751384"]]
  (1.0ms)  commit transaction
  (0.1ms)  begin transaction
  (0.1ms)  commit transaction
Completed 500 Internal Server Error in 1070ms (ActiveRecord: 3.3ms)

ActionView::MissingTemplate (Missing template profile/update, application/update with {:locale=>[:ru], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :haml, :jbuilder]}.

それを解決する方法は?

4

0 に答える 0