Ты не должен. Тем самым вы нарушаете множество принципов проектирования, и в будущем вы только разочаруетесь.
Ваша модель не должна заботиться о контексте вашего контроллера. Он должен заботиться только о данных, поскольку они относятся к себе.
Что вы можете сделать, тем не менее, это использовать ActiveModel::Attributes
API.
В вашей модели:
class Product < ApplicationRecord
has_many :prices
has_many :currencies, through: :prices
attribute :currency
def price
self.currency
end
end
В вашем контроллере:
class ProductsController < ApplicationController
def show
@product = Product.find(params[:id])
@product.currency = @currency
end
end
С API ActiveModel::Attributes
можно сделать гораздо больше, например, установить значения по умолчанию, выполнить проверки и даже установить, какой это тип объекта (логический / true / false, целое число, строка и т. Д.) - он ведет себя так же, как ваши обычные атрибуты в модели, они не поддерживаются вашей базой данных.
Подробнее об этом замечательном API https://apidock.com/rails/ActiveRecord/Attributes/ClassMethods/attribute