【问题标题】:Displaying logic from one model in the view of another in Rails?在 Rails 中以另一个模型的视图显示来自一个模型的逻辑?
【发布时间】:2011-09-22 03:30:28
【问题描述】:

我有一个模型,统计,它有 6 个字符模型的统计数据。用户可以输入力量、智力等值。我编写了一种根据输入的分数自动计算奖金或处罚的方法。以下是体质加成的逻辑,来自我的统计模型:

def con_modifier
  (constitution.to_i - 10) / 2
end

我在我的 Character 视图中显示从 Statistic 模型收集的信息,并且我想看到奖励,所以我在我的 Character 模型的 Show 方法中定义它,如下所示:

@con_modifier = @character.statistic.con_modifier

我可以在角色视图中毫无问题地查看它。但这是我的问题。我有另一个模型,Fortitude,它需要获取这个数字并使用它来计算 Fortitude 保存的总值。到目前为止,这就是我所拥有的:

def total
  fortitude_base.to_i + @con_modifier + magic.to_i + misc.to_i
end

然后我得到这个错误:

nil can't be coerced into Fixnum

显然它没有调用正确的信息。有任何想法吗?我是否也需要在我的 Fortitude 控制器中定义它,或者我可以简单地在 Fortitude 模型中定义它并以这种方式在视图中调用它? Fortitude 正在我的 Character 视图中显示,所以我认为在 Character 模型的 Show 方法中定义这个逻辑会很简单,但是我这几天一直在努力解决这个问题,但没有任何进展。谢谢!

【问题讨论】:

  • 您能发布您的模型和控制器的完整代码吗?很难清楚地了解这几条信息的情况。
  • @con_modifier is an action instance variable, and not available in your model. Why can't you just call character.statistic.con_modifier`?
  • 感谢您的意见。我还没有将我当前的代码推送到 git,但是我今晚回家后会发布完整的代码。

标签: ruby-on-rails logic models controllers


【解决方案1】:

将修饰符作为参数传递:

def total(con_mod)
  fortitude_base.to_i + con_mod + magic.to_i + misc.to_i
end

然后在其他地方使用它:

@fortitude = Fortitude.whatever
@saving_throw = @fortitude.total(@character.statistic.con_modifier)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多