在Rails 3.1中创建嵌套表单

时间:2013-01-05 22:47:32

标签: ruby-on-rails-3 ruby-on-rails-3.1 nested-forms

我正在尝试渲染我已设置的部分内容如下。我还试图创建一个嵌套的表单,我已将accepts_nested_attributes_for :user包含在我的hospital_bookings模型中。我似乎得到以下错误:

  

Rota_days #index

中的NameError      

显示   C:/Users/home/Desktop/Portal/app/views/rota_days/index.html.erb   第31行引出的地方:

     

未定义的局部变量或方法`hospital_booking'for

指向我的index.html.erb的以下行<%= render :partial => "booking_dialog", :locals => { :booking => hospital_booking.new } %>,如下所示。我认为这与我的复数有关。将hospital_bookings.new更改为hospital_booking.new但这不起作用

_booking_dialog.html.erb

  <%= form_for booking do |f| %> 
     <%= f.fields_for :user do |f| %>
        <br/>
        <%= f.label :name %>
        <br/>
        <%= f.text_field :name %>
        <%= f.hidden_field :hospital_id %>
        <%= f.hidden_field :id unless booking.new_record? %>
        <div class="actions">
          <%= f.submit %>
        </div>
    <% end %>

1 个答案:

答案 0 :(得分:0)

hospital_booking.new没有意义:您没有名为hospital_booking的本地变量。如果您想要HospitalBooking模型的新实例,那么您需要HospitalBooking.new

所以:

<%=  render :partial => "booking_dialog", :locals => { :booking => HospitalBooking.new } %>

更新(来自评论)

booking_dialog表单部分中,您需要将name属性放在fields_for块内的关联user记录中,以便将其与父母(预订):

<%= form_for booking do |f| %>
  <%= fields_for :user do |user_fields| %>
    <%= user_fields.label :name %>
    <%= user_fields.text_field :name %>
  <% end %>
  <%= f.hidden_field :hospital_id %>
  <%= f.hidden_field :id unless booking.new_record? %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

P.S。你在这里:id有一个隐藏的字段似乎很奇怪。你不应该那样。