我不知道发生了什么...... 我正在尝试使用has_many关联发送hidden_fields,但代码不会出现在html中。
我正在发送代码。可能会更清楚
在html.erb中:
<div id="billing_fields">
<div class="form-group col-xs-12 col-sm-11 col-md-10 col-lg-7">
<%= f.fields_for :orders do |field| %>
<div class="field">
<%= field.hidden_field :digital_product_plan_id, :value => @orders.digital_product_plan_id %>
<%= field.hidden_field :express_payer_id, :value => @orders.express_payer_id %>
<%= field.hidden_field :express_token, :value => @orders.express_token %>
</div>
<% end %>
</div>
</div>
正在生成这个html:
<div id="billing_fields">
<div class="form-group col-xs-12 col-sm-11 col-md-10 col-lg-7">
</div>
</div>
当我更换 “f.fields_for:orders” 同 “f.fields_for:order” 在html.erb中,生成了这个html(我期待的是“订单”(上一个)版本的那个)
<div id="billing_fields">
<div class="form-group col-xs-12 col-sm-11 col-md-10 col-lg-7">
<div class="field">
<input id="user_order_digital_product_plan_id" name="user[order][digital_product_plan_id]" type="hidden" value="1" />
<input id="user_order_express_payer_id" name="user[order][express_payer_id]" type="hidden" value="FVPYDJ7JCUY96" />
<input id="user_order_express_token" name="user[order][express_token]" type="hidden" value="EC-32X744951C158904E" />
</div>
</div>
</div>
billing_fields位于此form_for:
中<%= form_for @user, :url => registration_path(@user), html: {class: "form-horizontal", role: "form"} do |f| %>
订单控制器:
def new
@user = current_user
@orders = Order.where(:paypal_express_token => params[:token]).last
@orders.get_details
if ! @orders.paypal_email.blank?
@orders.save!
end
if @user.nil?
@user = User.new
...
end
@orders.user ||= @user
end
订单型号:
belongs_to :user
用户模型:
attr_accessible ... :orders_attributes
has_many :orders
accepts_nested_attributes_for :orders
我正在填补...任何提示?
这个问题涉及这个问题的另一个方面: How to create a relationship of a new parent with an existing child in Rails
答案 0 :(得分:3)
几个问题:
<强> f.fields_for
强>
您可能知道这一点,但您的f.fields_for
来电需要包含在form_for
方法中。您的HTML会自行显示 - 如果是设计,则需要将其放在form_for
块中
build
你真正的问题可能是你的关联数据没有调用build
:
#app/controllers/users_controller.rb
Class UsersController < ActiveRecord::Base
def new
@user = User.new
@user.orders.build #-> this should get f.fields_for to show
end
end
这是great resource详细说明其工作原理
来自SevenSeaCat的注释:
它会迭代输出字段的用户订单,因此不会 如果用户没有任何
,则输出订单的字段