簡體   English   中英

我想用關聯的 model 進行新建和創建

[英]I want to do new and create with the associated model

我們想要達到的目標

使用關聯的 model newcreate 原因可能是沒有為@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM