目前我有一个用户可以投票的测验,我想在我处理这些测验时在内存(而不是数据库)中设置一个字段,例如:
模型/ 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非常脏,如它在模型上设置属性值,不一定属于那里。
答案 0 :(得分:1)
您可以使用active decorator。或者any decorator gem你想要的。
我喜欢主动装饰,因为它是自动的。
或者您可以在控制器中定义对象后立即实现自己的混合方法。
无论如何,使用活动装饰器,您将拥有一个名为app/decorators/quiz_decorator.rb
的文件:
module QuizDecorator
def user_voted
@user_voted ||= ComplicateLogic.get_user_voted(current_user, self)
end
end
然后在您的观看中,您将获得访问权限:
@quiz.user_voted
我会添加一个询问标记,因为方法返回boolean:user_voted?
。
PS:我不知道你是否可以访问current_user
,你可以通过它。
答案 1 :(得分:1)
该模型本质上是一个链接到数据库的Ruby类。如果每个属性都不一定与数据库对齐,那就不脏了。添加额外属性是一种非常干净的方法,因为它不需要添加额外的模型和/或宝石。
我对表格使用了这个范例。您可以使用具有此类属性的form_for
,并在允许大量分配属性时自动设置它。这样它的功能就像任何其他属性一样,但不需要保存。