[英]I want to do new and create with the associated model
使用關聯的 model new
和create
。 原因可能是沒有為@movie
設置變量。 所以我想知道如何獲取電影的 ID。
路線
# The routes are specified.
Rails.application.routes.draw do
# get 'movies', to: 'movies#index'
scope :admin do
get 'search', to: 'movies#search'
resources :sheets, only: [:index]
resources :schedules, only: [:index]
resources :movies do
resources :schedules, except: [:index]
end
end
end
model
電影.rb
class Movie < ApplicationRecord
has_many :schedules
end
時間表.rb
class Schedule < ApplicationRecord
belongs_to :movie
end
controller
#########################################################
# I don't know what's going on here.
def new
@schedule = @movie.schedules.build
end
def create
@schedule = @movie.schedules.create(schedule_params)
redirect_to schedules_path
end
#########################################################
看法
<!DOCTYPE html>
<html lang="en">
<head>
<%= render 'shared/head' %>
<title>schedule/new</title>
</head>
<body>
<%= form_with model: @schedule, url: movie_schedules_path do |form| %>
<div class="field">
<%= form.label :start_time %>
<%= form.date_field :start_time %>
</div>
<div class="field">
<%= form.label :end_time %>
<%= form.date_field :end_time %>
<%= form.submit %>
</div>
<% end %>
</body>
</html>
・@movie = Movie.find(params[:id])
由於路由無法獲取。
web_1 | NoMethodError (undefined method `schedules' for nil:NilClass):
web_1 |
web_1 | app/controllers/schedules_controller.rb:7:in `new'
web_1 | Started GET "/admin/movies/15/schedules/new" for 192.168.0.1 at 2021-10-05 07:06:39 +0000
web_1 | Cannot render console from 192.168.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
web_1 | Processing by SchedulesController#new as HTML
web_1 | Parameters: {"movie_id"=>"15"}
web_1 | Completed 404 Not Found in 20ms (ActiveRecord: 1.2ms | Allocations: 1755)
web_1 |
web_1 |
web_1 |
web_1 | ActiveRecord::RecordNotFound (Couldn't find Movie without an ID):
web_1 |
web_1 | app/controllers/schedules_controller.rb:7:in `new'
web_1 | Started GET "/admin/movies/15/schedules/new" for 192.168.0.1 at 2021-10-05 07:06:41 +0000
web_1 | Cannot render console from 192.168.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
web_1 | Processing by SchedulesController#new as HTML
web_1 | Parameters: {"movie_id"=>"15"}
web_1 | Completed 404 Not Found in 7ms (ActiveRecord: 0.0ms | Allocations: 601)
web_1 |
web_1 |
web_1 |
web_1 | ActiveRecord::RecordNotFound (Couldn't find Movie without an ID):
web_1 |
web_1 | app/controllers/schedules_controller.rb:7:in `new'
您有嵌套在movies
下的schedules
。
運行rake routes | grep movies
rake routes | grep movies
你會看到路線的樣子。
movie_schedules POST /movies/:movie_id/schedules(.:format) schedules#create
new_movie_schedule GET /movies/:movie_id/schedules/new(.:format) schedules#new
edit_movie_schedule GET /movies/:movie_id/schedules/:id/edit(.:format) schedules#edit
movie_schedule GET /movies/:movie_id/schedules/:id(.:format)
所以你的參數是movie_id
並且做@movie = Movie.find(params[:movie_id])
會解決這個問題。
這是嵌套資源的文檔。
razvans 在我使用的評論中建議
@movie = Movie.find(params[:movie_id])
對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.