1

我有一个“Word”模型,它有 3 个字符串变量:“word_a”、“word_b”、“word_ab”。

在我看来,一个表格收集了“word_a”和“word_b”的值:

  <%= f.text_field :word_a %>
  <%= f.text_field :word_b %>

保存由“word_a”和“word_b”组合自动生成的“word_ab”值的最佳方法是什么?

我现在这样做的方式似乎真的很错误。提交第一个表单后,我让控制器重定向到另一个带有“word_ab”表单的编辑页面,该表单的值结合了“word_a”和“word_b”。

  <%= f.text_field :word_ab, :value => @word.word_a+"_"+@word.word_b %>

然后用户必须重新提交表单以将“word_ab”保存到数据库中。我不能这样做是控制器吗?

4

1 回答 1

1

您确定要将连接值保存到 db 吗?编辑呢?

如果您仍然想这样做 - 最好的想法是在模型中添加 attr_accessor

attr_accessible :word_a, :word_b
attr_accessor :word_a, :word_b

第一行允许您执行质量分配,第二行创建 setter 和 getter 方法。然后,还在模型中做

before_validation(:on => :create) do
  self.word_ab = word_a + word_b
end

您也可以执行此操作before_save,并且可以使用常规验证器单独进行验证word_aword_b

专业提示:创建返回连接字符串的 getter 方法

def word_ab
  self.word_a + self.word_b
end

相关型号

class User
  has_one :profile_picture

  def word_ab
    self.profile_picture.url + self.word_a + self.word_b
  end

end
于 2013-06-19T16:34:53.460 回答