为什么代码没有出现在 html 中?...在​​ Rails 中 [英] Why the code doesn't appear in the html?... in Rails

查看:46
本文介绍了为什么代码没有出现在 html 中?...在​​ Rails 中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道发生了什么......我正在尝试发送带有 has_many 关联的 hidden_​​fields,但代码没有出现在 html 中.

我正在发送代码.可能会更清楚

在 html.erb 中:

 

<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 %>

<%结束%>

它正在生成这个 html:

<div class="form-group col-xs-12 col-sm-11 col-md-10 col-lg-7">

当我更换f.fields_for :orders"和f.fields_for :order"在 html.erb 中,生成了这个 html(我期待与订单"(以前的)版本类似的东西)

 

<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"/>

billing_fields 在这个 form_for 中:

<%= form_for @user, :url =>注册路径(@user), html: {class: "form-horizo​​ntal", role: "form"} do |f|%>

订单控制器:

def new@user = current_user@orders = Order.where(:paypal_express_token => params[:token]).last@orders.get_details如果 !@orders.paypal_email.blank?@orders.save!结尾如果@user.nil?@user = User.new...结尾@orders.user ||= @user结尾

订单模型:

belongs_to :user

用户模型:

attr_accessible ... :orders_attributeshas_many :订单accepts_nested_attributes_for :orders

我正在填补迷失...有什么提示吗?

这个问题涉及这个问题的另一个方面:如何在 Rails 中创建新父级与现有子级的关系

解决方案

几个问题:

f.fields_for

您可能知道这一点,但是您的 f.fields_for 调用需要包含在 form_for 方法中.您的 HTML 自行显示 - 如果这是设计使然,您需要将其放入 form_for

<小时>

构建

您真正的问题可能是缺少对关联数据调用 build:

#app/controllers/users_controller.rb类 UsersController 这应该让 f.fields_for 显示结尾结尾

这是一个很棒的资源详细说明这是如何工作的

<块引用>

来自 SevenSeaCat 的注释:

它遍历用户的订单输出字段,所以它不会如果用户没有订单,则输出订单字段

I don't know what is happening... I'm trying to send hidden_fields with has_many association but the code doesn't appear in the html.

I'm sending the code. Probably it will be more clear

In the 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>

It is generating this html:

<div id="billing_fields">
  <div class="form-group col-xs-12 col-sm-11 col-md-10 col-lg-7">
  </div>
</div>

When I replace "f.fields_for :orders" with "f.fields_for :order" in the html.erb, this html is generated (I was expecting something like that with the "orders" (previous) version)

  <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>

The billing_fields is inside this form_for:

<%= form_for @user, :url => registration_path(@user), html: {class: "form-horizontal", role: "form"} do |f| %>

Order controller:

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

Order model:

belongs_to :user

User model:

attr_accessible ... :orders_attributes
has_many :orders
accepts_nested_attributes_for :orders

I'm filling lost... Any hints?

This question deals with another aspect of this problem: How to create a relationship of a new parent with an existing child in Rails

解决方案

Several issues:

f.fields_for

You probably know this, but your f.fields_for call needs to be contained within a form_for method. Your HTML shows it on its own - if this by design, you need to put it inside a form_for block


build

Your real problem is likely with a lack of calling build on your associative data:

#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

Here is a great resource detailing how this works

Note from SevenSeaCat:

it iterates over the user's orders outputting the fields, so it won't output fields for orders if the user doesn't have any

这篇关于为什么代码没有出现在 html 中?...在​​ Rails 中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆