代码之家  ›  专栏  ›  技术社区  ›  pdu

如何手动构建一个正确的嵌套表单,它接受嵌套的属性?

  •  0
  • pdu  · 技术社区  · 14 年前

    我正在尝试为测试目的手动构建表单字段。我有以下型号:

    class Bedroom < ActiveRecord::Base
        has_many :booked_bedrooms
        has_many :bookings, :through => :booked_bedrooms
    end
    
    class Booking < ActiveRecord::Base
        has_many :booked_bedrooms
        has_many :bedrooms, :through => :booked_bedrooms
        accepts_nested_attributes_for :booked_bedrooms
    end
    
    class BookedBedroom < ActiveRecord::Base
        belongs_to :booking
        belongs_to :bedroom
        # fields: bedroom_id, :booking_id
    end
    

    当我在控制台中尝试以下操作时,将保存预订和关联的预订房间:

    >> b = Booking.new({ :booked_bedrooms_attributes => { 0 => { :bedroom_id => 1  }  }  })
    => #<Booking id: nil, start_date: nil, end_date: nil, created_at: nil, updated_at: nil>
    >> b.save
    => true
    >> b.booked_bedrooms
    => [#<BookedBedroom id: 1, booking_id: 1, bedroom_id: 1, created_at: "2010-06-22 18:55:57", updated_at: "2010-06-22 18:55:57">]
    

    所以我建了一个这样的模型:

    <% form_for @booking do |form| %>
    <% for bedroom in @available_bedrooms %>
    
                <%= check_box_tag "booked_bedrooms_attributes[#{bedroom.id}][bedroom_id]", bedroom.id %> <%= bedroom.name %>  
                as
                <%= select_tag "booked_bedrooms_attributes[#{bedroom.id}][booking_type_id]", options_for_select(bedroom.booking_types.map {|p| [p.name, p.id]}) %>
    <% end %>
    <% end %>
    

    我知道我可以使用formtastic或一些字段,但我想以硬编码的形式解决这个问题,以便于演示。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Ju Nogueira    14 年前

    我想应该是这样的

    <%= check_box_tag "booking[booked_bedrooms_attributes][][bedroom_id]",
       bedroom.id %>
    
    <%= select_tag "booking[booked_bedrooms_attributes][][booking_type_id]",
       options_for_select(bedroom.booking_types.map {|p| [p.name, p.id]}) %>