Rails:如何在创建时将多个属性设置为相同的值?

时间:2013-03-26 04:16:50

标签: ruby-on-rails activerecord

假设我在HP模型中跟踪角色的健康状况。

我有HP.min,HP.max和HP.current,这三个属性分别跟踪最小HP,最大HP和当前HP的字符。

我有一个允许玩家输入最小和最大HP的表单。我想在创建时将HP.current设置为params [:max]的值,因为播放器的当前和最大HP的值完全相同,看起来非常冗余。

实现这一目标的最佳方法是什么?我尝试了一些ActiveRecord回调(after_save,before_create),但没有运气。

2 个答案:

答案 0 :(得分:1)

您目前如何使用回调?也许您可以发布一些代码,以便我们可以看到实现是否存在问题。 :)

或者,我假设表单值将传递给控制器​​,您可以通过在保存记录之前设置max => params[:max], current => params[:max]来手动构建记录。

答案 1 :(得分:1)

在模型中进行:

before_save { |hp| hp.current = hp.max }

或在控制器中执行某些操作:

def update
  @hp.current = params[:max] if params[:max]
  if @hp.update_attributes(params[:hp])
    # your options here
  else
    # your options here
end