您可能正在访问API
,但我仍然认为您的代码需要更好地结构化:
#config/routes.rb
resources :movies
#app/controllers/movies_controller.rb
class MoviesController < ApplicationController
def new
@movie = Movie.new
@movies = [[get data for Movies -- from API?]]
end
def create
@movie = Movie.new movie_params
@movie.save
end
private
def movie_params
params.require(:movie).permit(:id, :title, :rating, :release_date)
end
end
那么你的表格如下:
#app/views/movies/new.html.erb
<%= form_for @movie do |f| %>
<%= f.text_field :title %>
<%= f.text_field :rating %>
<%= f.collection_check_boxes :id, @movies, :id, :name %>
<%= f.submit %>
<% end %>
目前,您的流程不是常规的;它不能正确构建和对象,也不能防止大规模分配。
Rails/Ruby 中的一切都是面向对象的,这意味着当您“创建”一条新记录时,您正在构建一个新对象。可能听起来微不足道,但它是整个 Rails 框架的核心。
您对“我如何继续添加电影的标题、评级和发行日期”的评论表明了不遵守它的后果。
简而言之,您需要操作new
,create
它们都引用一个新Movie
对象,然后您可以使用从您的视图发送的参数填充该对象。
API
您应该对上述内容做出的唯一例外是,如果您的流程依赖于API
回调,例如通过计费系统或其他方式。
如果您想保留当前流程(IE 调用add_tmdb
),您需要确保按如下方式填充对象的属性:Movie
#app/controllers/movies_controller.rb
class MoviesController < ApplicationController
def add_tmdb
@movie = Movie.new
@movie.id = params[:movie_id]
@movie.save
#or....
@movie = Movie.new({id: params[:movie_id]})
@movie.save
end
end