Rails - форма для дочернего объекта - PullRequest
0 голосов
/ 19 сентября 2018

Я немного запутался в формах Rails.Я знаю, что есть вложенные формы, но мне нужно что-то еще.Я думаю.

Итак, у меня есть модели пола и комнаты.На каждом этаже много комнат, и каждая комната принадлежит одному этажу.(1-N ассоциация)

На каждом этаже у меня есть кнопка, чтобы добавить новую комнату.(открывает модальную форму для формы).

Как создать форму для этой комнаты с привязкой к полу?


Вид:

<% @floors.each do |floor| %>
  <div class="card">
    <div class="card-content">
      <span class="card-title"><b> <%= floor.name %></b></span>
      <div class="row">
      <% floor.rooms.each do |room| %>
          <div class="input-field col s3 l3">
            <div class="card">
              <div class="card-content">
                <span class="card-title"><b> <%= room.name %></b></span>
              </div>
            </div>
          </div>
      <% end unless floor.rooms.nil?%>
        <a class="waves-effect waves-light btn modal-trigger" style="float: right" href="#modal2">Add room</a>
      </div>
    </div>

Модели:

class Floor < ApplicationRecord
  has_many :rooms
  accepts_nested_attributes_for :rooms
end

class Room < ApplicationRecord
  belongs_to :floor
end

Контроллер:

  def floor_params
    params.require(:floor).permit(:name, :room_attributes => [:name])
  end

1 Ответ

0 голосов
/ 19 сентября 2018

То есть вы хотите создать комнаты для существующего этажа, тогда вы не можете использовать accepts_nested_attributes_for.Вместо этого вы можете использовать вложенные ресурсы с form_for, чтобы создать комнату для этого этажа следующим образом:

<%= form_for [floor, @room] do |f| %>
  --- code---
<% end %>

В floor_controller#index добавить @room = Room.new и включить нижеследующее в routes.rb

#routes.rb
resources :floors do
  resources :rooms, only: [:create]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...