>

새 방을 만들려고 할 때 뷰의 7 번 라인에서 오류가 발생합니다 :

undefined method `rooms_path' for #<#<Class:0x007fb46b5db2a0>:0x007fb46b5d9ec8>

이 오류가 발생하는 이유에 대해 약간 혼란스러워합니다. 나는 Room 사이의 관계를 구축  그리고 Facility  각 시설에는 많은 방이 있습니다. 시설 부분은 버그없이 작동하며 시설을 작성/편집/표시 할 수있었습니다.

조회수 (views/rooms/new.html.erb)

<div class="panel panel-default">
  <div class="panel-heading">
    Create your beautiful room
  </div>
  <div class="panel-body">
    <div class="container">
      <%= form_for @room do |f| %>
        <div class="form-group">
          <label>Name</label>
          <%=f.text_field :room_name, placeholder: "What is the name of the room?", class: "form-control", required: true%>
        </div>
        <div><%= f.submit "Create This Room", class: "btn btn-normal" %></div>
      <%end%>
    </div>
  </div>
</div>

내 방 모델 (models/room.rb) :

class Room < ApplicationRecord
  belongs_to :facility
  validates :room_type, presence: true
  validates :room_name, presence: true
end

내 시설 모델 (models/facility.rb) :

class Facility < ApplicationRecord
  belongs_to :user
  has_many :photos
  has_many :rooms
  validates :facility_name, presence: true
  validates :address, presence: true
  validates :license, presence: true
  validates :phone, presence: true
  def cover_photo(size)
    if self.photos.length > 0
      self.photos[0].image.url(size)
    else
      "blank.jpg"
    end
  end
  
end

내 방 컨트롤러 (controllers/rooms_controller.rb)

class RoomsController < ApplicationController
  before_action :set_room, except: [:index, :new, :create]
  
  def index
    @facility = Facility.find(params[:facility_id])
    @rooms = @facility.rooms
  end
  def new
    @facility = Facility.find(params[:facility_id])
    @room = @facility.rooms.build
  end
 end

경로 (routes.rb)

Rails.application.routes.draw do
  devise_for :users,
              path: '',
              path_names: {sign_in: 'login', sign_out: 'logout', edit: 'profile', sign_up: 'registration'},
              controllers: {omniauth_callbacks: 'omniauth_callbacks', registrations: 'registrations'}
  resources :users, only: [:show]
  resources :facilities, except: [:edit] do
    member  do
      get 'listing'
      get 'pricing'
      get 'features'
      get 'services'
      get 'types_care'
      get 'photo_upload'
      get 'room_upload'
    end
    resources :rooms, except: [:edit] do
      member  do
        get 'listing'
        get 'pricing'
        get 'photo_upload'
      end
    end
    resources :photos, only: [:create, :destroy]
  end
end

이틀 동안이 문제를 고수하고 도움을 주셔서 감사합니다. :) 정말 감사합니다!


  • 답변 # 1

    form_for   @room 클래스를 기반으로 URL 생성 외부 리소스는 포함되지 않습니다. 따라서 아래 명령문을 사용하여 Rails에 명시 적으로 수행하도록 지시해야합니다.

    <%= form_for [@room.facility, @room] do |f| %>
    
    

  • 답변 # 2

    form_for 에 대해 다음 중 하나를 선택하십시오   <%= form_for @room do |f| %> 대신  경로가 중첩되어 있으므로

    <%= form_for @room, url: [@room.facility, @room] do |f| %>
    <%= form_for @room, url: [:facility, @room] do |f| %>
    <%= form_for [@room.facility, @room] do |f| %>
    <%= form_for [:facility, @room] do |f| %>
    
    

    여기서 form_for 에 대한 자세한 정보를 얻을 수 있습니다  도우미

관련 자료

  • 이전 python - "문자열 인덱스가 범위를 벗어남"오류를 해결할 수 없습니다
  • 다음 filepath - args로 경로가있는 Python 27 argsparse