【问题标题】:Where to write this method in Model or Controller?在 Model 或 Controller 中哪里写这个方法?
【发布时间】:2016-03-03 05:26:22
【问题描述】:

我是 Rails 新手,更了解 MVC。所以我有一个叫做 Bet 的模型,它有属性:id、odd、description、结果。我想编写方法set_won 将结果更改为1set_lost 将结果更改为0

我不太确定在 Model 或 Controller 中的何处实现这些方法?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller activerecord


    【解决方案1】:

    我建议您考虑为此使用枚举,从而将结果属性的值设置为“None”、“Won”或“Lost”之一。

    枚举将为您提供 getter 和 setter 方法,以及列出所有赢或输赌注的范围。

    http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html

    【讨论】:

      【解决方案2】:

      你应该把它写在模型里。

      在您的控制器中,您将调用“BetController#update”或任何您想要的操作,然后执行以下操作:

      class BetController < ApplicationController
         ...
         def update
           #do somestuff
           @bet.set_won or @bet.set_lost
         end
      
        -------
      
        class Bet < ActiveRecord::Base
          #some stuff up here
          def set_won
            self.outcome = 1
          end
      
          def set_lost
            self.outcome = 0
          end
        end
      

      【讨论】:

      • 为什么我需要写 self.outcome ?我可以只写结果 = 1 等等吗? @Menelik Tucker
      • 是的,你可以写outcome = 1,在这种情况下,这两个语句是等价的。
      【解决方案3】:

      您可以在 Model 中编写此代码,因为它专门用于在 Bet Model 中设置属性。另外,正如 Rails 所说的“Fat Model Skinny Controller”,模型会更合适。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-10
        • 2016-08-10
        • 1970-01-01
        • 2014-12-28
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多