非常によく似た問題について 20 以上の StackOverflow の記事 (および Web 上の他の多くの記事) を読み、それらの解決策を試しましたが、どれもうまくいきませんでした。この初心者を助けてください!
特に、私が最も頻繁に見つけた解決策は
form_for [@parent, @child] do |f|
しかし、他の人が行ったようにエラーを修正することはありません。
エラー:
エラーは localhost:3000/locations/1/restaurants/new で発生します
レストランでの NoMethodError#new
/app/views/restaurants/_form.html.erb の 1 行目を表示:
undefined method `restaurants_path' for #<#<Class:0x007fb7ab89ea80>:0x007fb7aaadc3c0>
抽出されたソース (行 #1 付近):
1: <%= form_for [@location, @restaurant] do |f| %>
2: <% if @restaurant.errors.any? %>
3: <div id="error_explanation">
4: <h2><%= pluralize(@restaurant.errors.count, "error") %> prohibited this restaurant from being saved:</h2>
アプリ コードのいずれにもrestaurants_pathに関する言及が見つからないため、これは魔法の Rails のデフォルトであると想定しています。
コード:
has_many/belongs_toモデルを使用しています: 場所に多くのレストランがあります。
config/routes.rb
resources :locations do
resources :restaurants
end
$レーキルート
location_restaurants GET /locations/:location_id/restaurants(.:format) restaurants#index
POST /locations/:location_id/restaurants(.:format) restaurants#create
new_location_restaurant GET /locations/:location_id/restaurants/new(.:format) restaurants#new
edit_location_restaurant GET /locations/:location_id/restaurants/:id/edit(.:format) restaurants#edit
location_restaurant GET /locations/:location_id/restaurants/:id(.:format) restaurants#show
PUT /locations/:location_id/restaurants/:id(.:format) restaurants#update
DELETE /locations/:location_id/restaurants/:id(.:format) restaurants#destroy
app/controllers/restaurants_controller.rb
def new
@restaurant = Restaurant.new
respond_to do |format|
format.html
format.json { render json: @restaurant }
end
end
def edit
@restaurant = Restaurant.find(params[:id])
end
def create
@location = Location.find(params[:location_id])
@restaurant = @location.restaurants.create(params[:restaurant])
respond_to do |format|
if @restaurant.save
format.html { redirect_to location_restaurants_path(@location), notice: 'Restaurant was successfully created.' }
format.json { render json: @restaurant, status: :created, location: @restaurant }
else
format.html { render action: "new" }
format.json { render json: @restaurant.errors, status: :unprocessable_entity }
end
end
end