【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.<ヘルパーメソッド>
コントローラのクラスレベルやモデルクラス内では