Ruby on rails 3 接受+所属的\u嵌套的\u属性\u不显示字段
我有两种型号:Ruby on rails 3 接受+所属的\u嵌套的\u属性\u不显示字段,ruby-on-rails-3,activerecord,nested-attributes,Ruby On Rails 3,Activerecord,Nested Attributes,我有两种型号: class User < ActiveRecord::Base acts_as_authentic has_many :orders end 及 这个想法是,如果用户已经登录,我只想为该用户下订单,但是如果他没有登录,那么我会要求他在下订单的同时注册。 这是订单单 <%= form_for(@order) do |f| %> <div class="field"> <%= f.label :quantity %>&l
class User < ActiveRecord::Base
acts_as_authentic
has_many :orders
end
及
这个想法是,如果用户已经登录,我只想为该用户下订单,但是如果他没有登录,那么我会要求他在下订单的同时注册。
这是订单单
<%= form_for(@order) do |f| %>
<div class="field">
<%= f.label :quantity %><br />
<%= f.number_field :quantity %>
</div>
<% if current_user %>
<div class="field">
<%= current_user.email%>
</div>
<%else%>
<%= f.fields_for(:user) do |user_form| %>
<%= render "newuser_fields", :f => user_form %>
<% end %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
新用户字段包括:
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %>
</div>
问题是它不会为用户显示字段
有什么建议吗?用户有很多订单,因此接受嵌套的属性,以便在用户模型中使用
如果父级不存在,则无法保存嵌套资源,因此您将首先创建用户,然后创建其订单
通常,如果用户不存在,将被重定向到注册页面。如果您不想这样做,您可以在OrderControllernew操作中执行以下操作
在您的订单中,您可以检查用户是否已登录,如果未创建用户表单,只需创建订单表单,然后为订单添加嵌套字段
# app/views/order/_form.html.erb
<% if user_signed_in? %>
//order form
<% else %>
// user form
<% form_for @user do |uf| %>
<%= uf.text_filed :email %>
<%= uf.password_filed :password %>
//now order fileds
<%= uf.fields_for :orders do |of| %>
//porder fileds
<% end %>
<% end %>
<% end %>
然后在“为用户和订单创建操作”中,您必须添加相应的检查
下面是一个演示如何使用accepts\u nested\u attributes\u for with attributes\u to:
用户有许多订单,因此接受嵌套的属性,以便在用户模型中使用
如果父级不存在,则无法保存嵌套资源,因此您将首先创建用户,然后创建其订单
通常,如果用户不存在,将被重定向到注册页面。如果您不想这样做,您可以在OrderControllernew操作中执行以下操作
在您的订单中,您可以检查用户是否已登录,如果未创建用户表单,只需创建订单表单,然后为订单添加嵌套字段
# app/views/order/_form.html.erb
<% if user_signed_in? %>
//order form
<% else %>
// user form
<% form_for @user do |uf| %>
<%= uf.text_filed :email %>
<%= uf.password_filed :password %>
//now order fileds
<%= uf.fields_for :orders do |of| %>
//porder fileds
<% end %>
<% end %>
<% end %>
然后在“为用户和订单创建操作”中,您必须添加相应的检查
下面是一个演示如何使用accepts\u nested\u attributes\u for with attributes\u to:
或者,您可以不使用accepts\u嵌套的\u属性,而仍然使用字段\u。然后,用户数据将位于params[:user]或params[:order][:user]或params[:users]中,不确定,请在删除accepts\u nested\u属性后查看服务器日志,因为这将更改字段名。因此,您可以在控制器创建操作中首先手动创建用户:
@user = current_user || User.create!(params[:user])
@order = @user.orders.build(params[:order])
额外的好处是,通过这种方式,您可以进行更多的控制,只需多出1行。或者,您可以不使用accepts\u嵌套的属性,而仍然使用fields\u作为属性。然后,用户数据将位于params[:user]或params[:order][:user]或params[:users]中,不确定,请在删除accepts\u nested\u属性后查看服务器日志,因为这将更改字段名。因此,您可以在控制器创建操作中首先手动创建用户:
@user = current_user || User.create!(params[:user])
@order = @user.orders.build(params[:order])
额外的好处是,通过这种方式,您可以获得更多的控制权,只需多出1行