1

"word_a" 、 "word_b" 、 "word_ab" の 3 つの文字列変数を持つ "Word" モデルがあります。

私のビューのフォームは、「word_a」と「word_b」の値を収集します。

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

「word_a」と「word_b」の組み合わせから自動的に作成される「word_ab」の値を保存する最良の方法は何ですか?

今のやり方は本当に間違っているようです。最初のフォームを送信した後、「word_a」と「word_b」を組み合わせた値を持つ「word_ab」フォームを含む別の編集ページにコントローラーをリダイレクトさせます。

  <%= 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

最初の行では一括代入を実行でき、2 行目では 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 に答える