Web + Life Hack

〜True But Useless〜

【rails】controller側でhelperの値を設定して、ActionMailerの値として使おうとしたらハマった。



四月の天気ってこんなに暑かったり、寒かったり
温暖の差が激しい季節だっけ?となっているg08m11です。

今回もまたハマりました。。。
概要はタイトル通りなので、早速、ソースを載せていきます。


helper側

helpers/g08m11_helper.rb
module G08m11Helper
  #駅名表示のためのメソッド
  def mailer_location_condition(params[:station_keywords])
   no_select_text = "設定なし"

    if params[:station_keywords].present? 
      loc = search_params[:station_keywords].join('/')  rescue no_select_text
    end
    return loc
  end

end


mail系

view/g0811_mailer.erb
---------------
駅名だよ!⇒<%= @station %>
---------------


view側(post)

view/g08m11/new.html.erb
<% form_for(:g08 m11, @g08m11, :url => create_g08m11_path , :html => {:class => 'g08m11_form'}) do |f| %>
 <%= hidden_field_params) %>
<%end %>



controller側

controllers/g08m11_controller.rb
class g08m11Controller < ApplicationController
  def create
@station = self.class.helpers.mailer_location_condition(params[:station_keywords])
  end
end


前提条件などを省いているので分かりづらいかと思うのですが、
「こんなことしてるんだな。」ってニュアンスだけでも伝わってくれた嬉しいです。
またポイントは


Module: ActionController::Helpers::ClassMethodsの恩恵を
Rails2.1以降から受けることができ、
以下のようにしてhelperメソッドをcontrollerやmodelなどview以外で使用できることがポイント!


コントローラのインスタンスメソッド内であれば

self.class.helpers.<ヘルパーメソッド>


コントローラのクラスレベルやモデルクラス内では

ApplicationController.helpers.<ヘルパーメソッド>


まだまだやったことないこと多いなー。
知識としては知っているのにすぐ作れないあたりがへっぽこエンジニア感出てる。。。。