ruby-on-rails - 如何在 Rails 中将非持久数据添加到模型中?

标签 ruby-on-rails design-patterns

目前我有一个用户可以投票的测验,我想在处理这些测验时在内存(而不是数据库)中设置一个字段,例如:

模型/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/

相关文章:

java - 如何以更少的代码重复将关卡添加到我的游戏中?

javascript - Rails 应用程序中的 Ajax 按钮不再更新

ruby-on-rails - 在 Rails 模型中进行正则表达式搜索的惯用方法?

ruby-on-rails - 具有血统的动态选择

java - 使用 MVC 风格,调用查询函数的最佳位置在哪里?

c# - 如何避免在类之间传递上下文引用

ruby-on-rails - 异常通知程序插件不发送电子邮件

ruby-on-rails - 翻译注册时的设计标签?

c# - 正确的单例类实现

java - 斯卡拉 : Registry design pattern or similar?