Heroku + Rails错误ActiveRecord :: StatementInvalid

我在这里遇到了一些困境。

我有一个评论脚手架和一个电影脚手架

当去电影页面并创建新评论时,我去这里/ movies / 12 / comments / new(12是id)

并且做了我的控制器

def new @movie = Movie.find(params[:movie_id]) @comment = @movie.comments.new @search = Movie.search(params[:q]) respond_to do |format| format.html # new.html.erb format.json { render json: @comment } end end 

但是当我启动到heroku时,我得到了这个错误

 *Processing by CommentsController#new as HTML ActiveRecord::StatementInvalid (PG::Error: ERROR: invalid input syntax for integer: "movie_id" Completed 500 Internal Server Error in 636ms LINE 1: ... "movies".* FROM "movies" WHERE "movies"."id" = 'movie_id'... Parameters: {"movie_id"=>"the-social-network"} app/controllers/comments_controller.rb:99:in `load_movie'* 

我尝试删除@movie = Movie.find(params[:movie_id])或在末尾添加.to_i ,如此处所述为什么这样:Rails中的id不能与Postgresql一起使用,但它可以与MySQL一起使用? ,但仍然没有运气

有任何想法吗? 谢谢!

Comment_form(查看)

   

Movie.rb

 class Movie  :destroy extend FriendlyId friendly_id :titleyear, use: :history def titleyear "#{title} #{id}" end end 

Comment.rb

 class Comment < ActiveRecord::Base attr_accessible :body, :movie_id, :subject, :user_id belongs_to :user belongs_to :movie end 

Comments_controller.rb

 class CommentsController < ApplicationController # GET /comments # GET /comments.json before_filter :load_movie before_filter :authenticate_user!, only: [:new,:create,:edit,:destroy] def index @comments = @movie.comments.all @search = Movie.search(params[:q]) respond_to do |format| format.html # index.html.erb format.json { render json: @comments } end end # GET /comments/1 # GET /comments/1.json def show @comment = Comment.find(params[:id]) @search = Movie.search(params[:q]) respond_to do |format| format.html # show.html.erb format.json { render json: @comment } end end # GET /comments/new # GET /comments/new.json def new @movie = Movie.find(params[:movie_id]) @comment = @movie.comments.new @search = Movie.search(params[:q]) respond_to do |format| format.html # new.html.erb format.json { render json: @comment } end end # GET /comments/1/edit def edit @comment = Comment.find(params[:id]) @search = Movie.search(params[:q]) end # POST /comments # POST /comments.json def create @comment = Comment.new(params[:comment]) @search = Movie.search(params[:q]) respond_to do |format| if @comment.save format.html { redirect_to :back } format.json { render json: @comment, status: :created, location: @comment } else format.html { render action: "new" } format.json { render json: @comment.errors, status: :unprocessable_entity } end end end # PUT /comments/1 # PUT /comments/1.json def update @comment = Comment.find(params[:id]) @search = Movie.search(params[:q]) respond_to do |format| if @comment.update_attributes(params[:comment]) format.html { redirect_to (@movie), notice: 'Comment was successfully updated.' } format.json { head :no_content } else format.html { render action: "edit" } format.json { render json: @comment.errors, status: :unprocessable_entity } end end end # DELETE /comments/1 # DELETE /comments/1.json def destroy @comment = Comment.find(params[:id]) @comment.destroy respond_to do |format| format.html { redirect_to comments_url } format.json { head :no_content } end end private def load_movie @movie = Movie.find_by_id(:movie_id) end end 

正如您传递的那样, movie_id参数实际上不是id ,而是字符串: Parameters: {"movie_id"=>"the-social-network"}

您的视图中可能存在错误配置的内容。 确保您传递的是movie.id而不是其他内容。

编辑:

收到的错误表示正在从movie_id URL段传递字符串the-social-network 。 您需要访问一个传递数字作为第二个参数的路径来访问您的表单,例如http://yoursite/movies/2/comments/new ,而不是http://yoursite/movies/the-social-network/comments/new