Ruby on rails Rails-组合变量并将其保存在控制器中

Ruby on rails Rails-组合变量并将其保存在控制器中,ruby-on-rails,Ruby On Rails,我有一个“Word”模型,它有3个字符串变量:“Word_a”,“Word_b”,“Word_ab” 在我看来,一个表单收集了“word_A”和“word_b”的值: 保存“word_ab”值的最佳方法是什么?该值将由“word_a”和“word_b”的组合自动生成 我现在做这件事的方式似乎真的错了。提交第一个表单后,我让控制器重定向到另一个编辑页面,该页面带有一个“word_ab”表单,该表单的值结合了“word_a”和“word_b” <%= f.text_field :wor

我有一个“Word”模型,它有3个字符串变量:“Word_a”,“Word_b”,“Word_ab”

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


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

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

  <%= f.text_field :word_ab, :value => @word.word_a+"_"+@word.word_b %>
@word.word\u a+“\u+@word.word\u b%>

然后,用户必须重新提交表单以将“word_ab”保存到数据库中。如果是控制器,我不能执行此操作吗?

是否确实要将具体值保存到db?编辑怎么样

若您仍然想这样做,最好的办法是在模型中添加attr_访问器

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
您也可以在保存之前对
执行此操作,并且可以使用常规验证器分别验证
word\u a
word\u 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

是否确实要将特定值保存到db?编辑怎么样

若您仍然想这样做,最好的办法是在模型中添加attr_访问器

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
您也可以在保存之前对
执行此操作,并且可以使用常规验证器分别验证
word\u a
word\u 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

是的,我相信你已经回答了你自己的问题。只需在控制器中的提交操作中进行组合。然后将其存储在数据仓库中。那么这是最好的方法吗?多步骤表格?对不起。我看错了。控制器中的代码是什么样子的?是的,我相信您已经回答了自己的问题。只需在控制器中的提交操作中进行组合。然后将其存储在数据仓库中。那么这是最好的方法吗?多步骤表格?对不起。我看错了。控制器中的代码是什么样子的?谢谢Michael。这非常有效。虽然你确实提出了一个关于编辑的好观点,这会让我重新思考一下这个方法。是否可以将另一个模型中的变量引入“word_ab”变量?例如:self.word_ab=@picture.name+word_a+word_b?是的,合并字符串总是很容易,拆分字符串则更难,有关提示,请参阅更新的答案。是的,如果是关联模型。我不建议参考不相关的模型,这将是一个糟糕的设计。它是相关的,所以它工作得很好。再次感谢。但我遇到的一个问题是,当我有“attr_accessible:word_a,:word_b attr_accessor:word_a,:word_b”时,word_a和word_b不会保存,但word_ab会保存。我完全删除了attr_访问器,一切都很完美。不知道为什么。因为
attr\u accessor
覆盖了setter和getter行为。这非常有效。虽然你确实提出了一个关于编辑的好观点,这会让我重新思考一下这个方法。是否可以将另一个模型中的变量引入“word_ab”变量?例如:self.word_ab=@picture.name+word_a+word_b?是的,合并字符串总是很容易,拆分字符串则更难,有关提示,请参阅更新的答案。是的,如果是关联模型。我不建议参考不相关的模型,这将是一个糟糕的设计。它是相关的,所以它工作得很好。再次感谢。但我遇到的一个问题是,当我有“attr_accessible:word_a,:word_b attr_accessor:word_a,:word_b”时,word_a和word_b不会保存,但word_ab会保存。我完全删除了attr_访问器,一切都很完美。不确定原因。因为
attr\u访问器
重写了setter和getter行为