目前我有一个用户可以投票的测验,我想在处理这些测验时在内存(而不是数据库)中设置一个字段,例如:
模型/quiz.rb:
class Quiz
attr_accessor :user_voted # a boolean
end
quiz = Quiz.new
quiz.user_voted = ComplicateLogic.get_user_voted(current_user, quiz)
我想让前端变得更容易并设置字段,以便前端可以轻松使用“quiz.user_voted”,但我觉得将 :user_voted 添加到测验模型中非常肮脏,因为它正在模型上设置一个属性值,该值不一定属于该模型。
最佳答案
您可以使用active decorator 。或any decorator gem你想要的。
我喜欢主动装饰器,因为它是自动的。
或者您可以在 Controller 中定义对象后立即实现自己的混合方法。
无论如何,使用事件装饰器,您将拥有一个名为 app/decorators/quiz_decorator.rb
的文件:
module QuizDecorator
def user_voted
@user_voted ||= ComplicateLogic.get_user_voted(current_user, self)
end
end
然后在您的 View 中您将可以访问:
@quiz.user_voted
我会添加一个问号,因为方法返回 bool 值:user_voted?
。
PS:我不知道你是否有权访问那里的current_user
,不过你可以通过它。
关于ruby-on-rails - 如何在 Rails 中将非持久数据添加到模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647658/