0

会場とコンサートの2つのモデルがあります。コンサートは会場に属しており、会場にはたくさんのコンサートがあります。私のフォームでは、カスタムセッターを使用してコンサート会場を設定しています。フォームは次のようになります。

<%= form_for @concert do |f| %>      
      <%= f.label :venue_name, "Venue" %>
      <%= f.text_field :venue_name %>

それから私のモデルでは:

  def venue_name=(name)
    self.venue = Venue.find_or_create_by_name(name) if name.present?
  end

これに伴う問題は、モデルが作成されている場合は、モデルにアドレスを追加したいということです。これは子供のフォームで可能ですか?セッターに名前と住所の両方を渡すことは可能ですか?

編集:

以下に提案されているコメントのように、accepts_nested_attributes_forの使用に移行しました。Ryan Batesは、これに関するすばらしいスクリーンキャストをここに持っています:http: //railscasts.com/episodes/196-nested-model-form-revisedまたはドキュメントも問題ありません。

私は前もってこれにaccepts_nestedを使用していましたが、これはbelongs_to側にあるため、苦労しました。戻った今の私の修正は、この例では、@ concert.venue.buildを実行する代わりに、belongs_to側の構文が@concert.build_venueであるということです。

4

1 に答える 1

0

コンマ、アットマーク、セミコロンなどで区切られた名前とアドレスをモデルに追加できることをユーザーに示す場合、正規表現を使用してそれらの2つを分離し、それぞれを個別に挿入できます。

def venue_name=(name)
  venue = name.split(',')[0] # The comma (,) can be any symbol
  address = name.split((',')[1]
  # Insert venue
  # Insert address
end

これは醜い方法です。

于 2013-01-14T19:20:50.963 に答える