7

formtastic を使用してネストされたフォームを作成しようとしています。以下にコードを含めましたが、以下にリストしたいくつかの問題が発生しています。助言がありますか?ありがとう。

# Home model
class Home < ActiveRecord::Base
  has_many :home_members
  accepts_nested_attributes_for :home_members, :reject_if => :all_blank, :update_only => true, :allow_destroy => true
end


# Form builder in members/new.html.erb
<%= semantic_form_for @home, :url => home_members_path(@home), :html => { :method => :post }, :remote => true do |f| %>
  <%= f.inputs do %>
    <%= f.semantic_fields_for :home_members do |h| %>
    <%= h.input :name %>
    <%= h.input :email %>
    <%= h.input :birthday, :as => :string %>
  <% end %>
<% end %>

# members_controller's new method; @home is set in a before filter
def new
  2.times{ @home.home_members.build }
end
  1. ホームが保存されると、デフォルトのユーザーが作成されます。既存のレコードではなく、新しく作成されたレコードのみをフォームに表示するにはどうすればよいですか?

  2. #1が不可能な場合、既存のレコードを更新するにはどうすればよいですか? accept_nested_attributes_for に update_only を設定しましたが、まだ新しいレコードが作成されています。

  3. コントローラー アクションで 2.times{ @home.home_members.build } を実行しています。@home.home_members のサイズを出力すると、期待どおり 3 (1 つは既に存在します) になります。フォームに 2 セットの入力しか表示されないのはなぜですか? 1 セットには既存の home_member データが入力されています。

4

2 に答える 2

4

質問に答えるのに十分です1)新しく作成されたオブジェクトのみを表示します

# Form builder in members/new.html.erb
<%= semantic_form_for @home, :url => home_members_path(@home), :html => { :method => :post }, :remote => true do |f| %>
  <%= f.inputs do %>
    <%= f.semantic_fields_for :home_members do |h| %>
    <% if h.object.new_record? %>
      <%= h.input :name %>
      <%= h.input :email %>
      <%= h.input :birthday, :as => :string %>
    <% end %>
  <% end %>
<% end %>
于 2011-04-03T23:19:17.083 に答える
4

私は過去に繭を使って成功しました。https://github.com/nathanvda/formtastic-cocoon

于 2012-05-25T00:19:56.600 に答える