我在tmdb api上继续我的项目,并在保存查询结果的过程中。我创建了方法add_tmdb
来处理这个问题。至于我的看法,这就是我所拥有的:
= form_tag :action => 'add_tmdb' do
... stuff here
%td= check_box_tag "movie_id[]", movie.id
= submit_tag 'Add selected movie'
我的controller
位于以下位置:
def add_tmdb
movie = {params[:movie_id] => :id}
Movie.create!(movie)
flash[:notice] = "#{params[:movie_id]} was successfully created."
redirect_to movies_path
end
当我提交记录时,我收到一条活动记录错误。这是我收到的:
unknown attribute '["7555"]' for Movie.
我需要在哪里进行更改?
谢谢!
答案 0 :(得分:2)
params[:movie_id]
的值是单个元素数组。您正在使用该值作为哈希的键:
{params[:movie_id] => :id}
如果要指定:id
的值为params[:movei_id]
的密钥,那么您的哈希是向后的。你需要
{ id: params[:movie_id] }
答案 1 :(得分:0)
您可能正在访问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 %>
目前,您的流程不是传统的;它没有正确构建和反对,也没有防范mass assignment。
Rails / Ruby中的所有内容都是object orientated,这意味着当你&#34;创建&#34;新记录,您正在构建新的对象。可能听起来微不足道,但它是整个Rails框架的核心。
您对&#34的评论;如何继续添加电影的标题,评级和发布日期&#34; 表明不遵守该标题的后果。
简而言之,您需要new
,create
个操作,这两个操作都引用了一个新的Movie
对象,然后您可以使用从您的视图发送的参数填充该对象。
<强> API 强>
如果您的流量取决于API
回调,例如通过结算系统或其他方式,那么您应对上述内容做出的唯一例外就是。
如果您想保留当前的流量(IE来电add_tmdb
),您需要确保填写{{1}的属性对象如下:
Movie