为什么代码没有出现在Rails中的html?...中

时间:2014-06-08 00:28:34

标签: ruby-on-rails ruby-on-rails-3

我不知道发生了什么...... 我正在尝试使用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

1 个答案:

答案 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的注释:

     

它会迭代输出字段的用户订单,因此不会   如果用户没有任何

,则输出订单的字段