0

たとえば、text1というフィールドを含むユーザーモデルがあります。ユーザー/新しいフォームでは、このテキスト用に4つの個別のテキストボックスが必要です1。私のモデルでは、これらのボックスから値を取得し、それらをコンマ区切りの値として連結してDBに格納します。あなたに理解を与えるために、これは私が欲しいものです。

<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />

form_forヘルパーメソッドを使用してこれを取得するにはどうすればよいですか?今のところ、モデルのアクセサメソッドについては気にしないでください。これはすべて処理されます。トンありがとう。

4

3 に答える 3

1

Userモデルにいくつかの仮想属性を追加します

class User < ActiveRecord::Base
  attr_accessor :text1_part1  
  attr_accessor :text1_part2  
  attr_accessor :text1_part3  
  attr_accessor :text1_part4

  def before_validation
      self.text1 = "#{self.text1_part1}#{self.text1_part2}#{self.text1_part3}#{self.text1_part4}"
  end
  # make sure you fill the correct values for
  # the text parts for an existing record.
  # This can be done by implementing `after_find` or overriding
  # `text1=`.
end  

ビューコードでは、text1の代わりに新しい属性を使用します

<% form_for(:user) do |f| %>
   #some code
   <%= f.text_field :text1_part1>
   <%= f.text_field :text1_part2>
   <%= f.text_field :text1_part3>
   <%= f.text_field :text1_part4>
   #some code
   <%= f.submit "Save">
<% end %>
于 2010-02-18T19:43:52.473 に答える
0

私は似たようなことに取り組んでいますが、おそらくシリアル化があなたが探しているもののようです。残念ながら、私はまだ問題を解決していないので、これ以上具体的なことは何も提供できません。

于 2010-09-03T01:52:19.120 に答える
0

前の答えは解決策を与えるので、私はあなたが求めているものがあなたが望むようにうまくいかない理由についていくつかの背景を提供しています。

実際、同じ名前の複数の入力フィールドを使用してフォームを作成すると、そのデータが投稿されます。ただし、railsが投稿を受信すると、投稿データやURLパラメータが自動的にパラメータ化されます。基本的に&で分割され、キーと値のペアがparamsハッシュに割り当てられます。この結果、params [:user] [:text1](例から)は、既存のキーへの値の割り当てにすぎないため、遭遇したuser[text1]の最後のインスタンスの値を持ちます。ActiveRecordのマルチパラメーターの割り当てを掘り下げて、日時属性がどのように機能するかを理解することをお勧めします。これは、それらがユースケースに似ているためです。

于 2010-02-18T20:53:37.663 に答える