1

user_orderのインスタンスを返すというヘルパーがありますOrder。およびOrderのネストされた属性を受け入れます。私の(省略形の)フォームは次のようになります。UserAddress

<%= form_for user_order, :url => checkouts_path, :method => :post do |order| %>
  <%= order.fields_for :user_attributes do |user| %>
    <%= user.text_field :email %>
  <% end %>
<% end %>

Order.rbモデルコード:

belongs_to :user
accepts_nested_attributes_for :user
validates_associated :user
attr_accessible :user

コントローラーコード:

def new
  @order = user_order # user_order is a method to get order from session
end

def create
  @order = user_order
  if @order.update_attributes(params[:order])
    redirect_to @order
  else
    render :new
  end
end

フォームがエラーで送信され、フォームが再レンダリングされた場合、user.emailの値は記憶されません。

なぜそうなのか?

4

2 に答える 2

0

実験した後、私はこれが機能することを理解しました:

コントローラ:

def new
  @order = Order.new
  @order.build_user
end

見る:

<%= form_for @order do |order_fields| %>
  <%= order_fields.order.fields_for :user do |user_fields| %>
    <%= user_fields.text_field :email %>
  <% end %>
<% end %>
于 2011-10-15T08:19:44.973 に答える
0

Railsコンソールからそのコントローラーコードを試し、それが機能することを確認しましたか?

development.logファイルは、フォームの送信時に実際にsql insertステートメントを試行していることを示していますか?

編集:再読み込み時に、挿入stmtが発生しているように聞こえます。nm 2番目の質問ですが、まだいくつかの情報があるかもしれません。

于 2011-09-16T19:22:19.450 に答える