コントローラー、ビュー、モデルの両方でセッション変数を共有しようとしています。
次のコードでは、コントローラーとビューで機能しています。
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :best_language_id
# Returns the ID of the language to use to display the description.
def best_language_id
@best_language_id ||= session[:best_language_id]
@best_language_id ||= current_project.default_language.id
return @best_language_id
end
end
しかし、モデルから呼び出すことはできません。
コントローラー、ビュー、および 1 つのモデルで best_language_id を呼び出して、翻訳が見つからない場合に best_language_id のフォールバックを取得できるようにしたいと考えています。
私のモデルの例(動作していません):
class Point < ActiveRecord::Base
# Retuns the attached word in the given language if exists.
# Otherwise, falls back on another translation
def word(preffered_language_id)
word = Word.find(:translation_id => self.translation_id, :language_id => preffered_language_id)
if word.blank?
word = translations.where(:translation_id => self.translation_id, :language_id => best_language_id)
end
return word
end
end
モデルに applicationcontroller メソッドの呼び出しを含めるべきではないことはわかっていますが、コントローラーとモデル全体で best_language_id を共有するにはどうすればよいですか?
編集: i18n の使用はここでは問題ではありません。翻訳は固定文字列ではなく、データベース内の変数です。
助けてくれてありがとう!