1

現在、私は2つのモデルを持っています。

class Booking
  include Mongoid::Document
  include Mongoid::Timestamps
  field :capacity, type: Integer
  field :date, type:Date

  embeds_many :appointments
  attr_accessible :capacity, :date, :appointments_attributes
  accepts_nested_attributes_for :appointments
end

class Appointment
  include Mongoid::Document
  field :name, type: String
  field :mobile, type: String

  embedded_in :booking
end

予約に埋め込まれた予約フォームを作成するにはどうすればよいですか? 理想的には、予約日を指定して予約を追加できるようにしたいです。

コンソールで実行できますが、フォームを作成する方法がわかりません。

私はこれを試しましたが、うまくいきません

<%= form_for(@booking) do |f| %>
  <div class="field">
    <%= f.label :capacity %><br />
    <%= f.text_field :capacity %>
  </div>
  <div class="field">
    <%= f.label :date %><br />
    <%= f.text_field :date %>
  </div>

  <h1>  form for appointment </h1>
        <%= f.fields_for :appointments do |builder| %>
          <div class="field">
            <%= builder.label :name %><br />
            <%= builder.text_field :name %>
          </div>
          <div class="field">
            <%= builder.label :mobile %><br />
            <%= builder.text_field :mobile %>
          </div>

        <% end %>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

予約コントローラーで

  def create
    @booking = Booking.new(params[:booking])
    @appointment = @booking.appointments.build(params[:appointments])

    respond_to do |format|
      if @booking.save
        format.html { redirect_to @booking, notice: 'Booking was successfully created.' }
        format.json { render json: @booking, status: :created, location: @booking }
      else
        format.html { render action: "new" }
        format.json { render json: @booking.errors, status: :unprocessable_entity }
      end
    end
  end

フォームが想定していることを実行するコンソール コマンド:

book = Booking.create(capacity: 10, date: Date.today)
book.appointments.create(name: "Josh", mobile: "19923")
book.appointments.create(name: "Bosh", mobile: "123344")
book.appointments
 => [#<Appointment _id: 51a083c332213f2cc9000002, _type: nil, name: "Josh", mobile: "19923">, #<Appointment _id: 51a0840632213f2cc9000003, _type: nil, name: "Bosh", mobile: "123344">] 
4

1 に答える 1

3

だから私は問題を解決しました。ネストされたフォームを使用する代わりに、通常どおり独自のコントローラーとフォームを使用してアプリケーション ドキュメントを作成します。アプリケーション モデルに日付フィールドを追加し、コントローラー内でその日付の予約ドキュメントをクエリし、その予約でアプリケーションを作成します。

コードは次のとおりです。

  def create
    date = params[:appointment]['date']
    booking = Booking.find_or_create_by(date: date)
    @appointment = booking.appointments.new(params[:appointment])


    respond_to do |format|
      if @appointment.save
        format.html { redirect_to booking, notice: 'Appointment was successfully created.' }
        format.json { render json: @appointment, status: :created, location: @appointment }
      else
        format.html { render action: "new" }
        format.json { render json: @appointment.errors, status: :unprocessable_entity }
      end
    end
  end
于 2013-05-25T15:28:19.060 に答える