- 首页
- 其他开发
- 为什么代码没有出现在 html 中?...在 Rails 中
为什么代码没有出现在 html 中?...在 Rails 中
[英] Why the code doesn't appear in the html?... in Rails
本文介绍了为什么代码没有出现在 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-horizontal", 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屋!