Ruby on rails Heroku在创建图书记录时抛出回滚错误
我目前正在构建一个应用程序,其中我有一个图书模型。 它在本地工作,没有任何问题。我将它部署到Heroku,运行Ruby on rails Heroku在创建图书记录时抛出回滚错误,ruby-on-rails,Ruby On Rails,我目前正在构建一个应用程序,其中我有一个图书模型。 它在本地工作,没有任何问题。我将它部署到Heroku,运行rakedb:migrate,并尝试创建一本书 我发现了以下回滚错误 2018-03-29T07:29:59.748305+00:00 app[web.1]: D, [2018-03-29T07:29:59.748238 #4] DEBUG -- : [feda9269-2f19-4916-a87f-bc179fd52bec] User Load (1.7ms) SELECT "
rakedb:migrate
,并尝试创建一本书
我发现了以下回滚错误
2018-03-29T07:29:59.748305+00:00 app[web.1]: D, [2018-03-29T07:29:59.748238 #4] DEBUG -- : [feda9269-2f19-4916-a87f-bc179fd52bec] User Load (1.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 3], ["LIMIT", 1]]
2018-03-29T07:29:59.750826+00:00 app[web.1]: D, [2018-03-29T07:29:59.750763 #4] DEBUG -- : [feda9269-2f19-4916-a87f-bc179fd52bec] (0.8ms) BEGIN
2018-03-29T07:29:59.763631+00:00 app[web.1]: D, [2018-03-29T07:29:59.763526 #4] DEBUG -- : [feda9269-2f19-4916-a87f-bc179fd52bec] (0.9ms) ROLLBACK
2018-03-29T07:29:59.764270+00:00 app[web.1]: I, [2018-03-29T07:29:59.764208 #4] INFO -- : [feda9269-2f19-4916-a87f-bc179fd52bec] Rendering books/new.html.erb within layouts/application
2018-03-29T07:29:59.770061+00:00 app[web.1]: I, [2018-03-29T07:29:59.769996 #4] INFO -- : [feda9269-2f19-4916-a87f-bc179fd52bec] Rendered books/_form.html.erb (5.5ms)
2018-03-29T07:29:59.770167+00:00 app[web.1]: I, [2018-03-29T07:29:59.770113 #4] INFO -- : [feda9269-2f19-4916-a87f-bc179fd52bec] Rendered books/new.html.erb within layouts/application (5.8ms)
2018-03-29T07:29:59.771544+00:00 app[web.1]: I, [2018-03-29T07:29:59.771486 #4] INFO -- : [feda9269-2f19-4916-a87f-bc179fd52bec] Rendered layouts/_navbar.html.erb (0.7ms)
2018-03-29T07:29:59.771904+00:00 app[web.1]: I, [2018-03-29T07:29:59.771828 #4] INFO -- : [feda9269-2f19-4916-a87f-bc179fd52bec] Rendered layouts/_alerts.html.erb (0.2ms)
2018-03-29T07:29:59.772181+00:00 app[web.1]: I, [2018-03-29T07:29:59.772125 #4] INFO -- : [feda9269-2f19-4916-a87f-bc179fd52bec] Completed 200 OK in 28ms (Views: 8.2ms | ActiveRecord: 3.4ms)
图书管理员
class BooksController < ApplicationController
before_action :find_book, only: [:show, :edit, :update, :destroy]
before_action :book_owner, only: [:destroy, :edit, :update]
def index
@books = Book.all.order("created_at DESC")
end
def show
end
def new
@book = current_user.books.build
@categories = Category.all.map{ |c| [c.name, c.id] }
end
def create
@book = current_user.books.build(book_params)
@book.category_id = params[:category_id]
if @book.save
redirect_to books_path
else
render 'new'
end
end
def edit
@categories = Category.all.map{ |c| [c.name, c.id] }
end
def update
@book.category_id = params[:category_id]
if @book.update(book_params)
redirect_to book_path(@book)
else
render 'edit'
end
end
def destroy
@book.destroy
redirect_to root_path
end
private
def book_params
params.require(:book).permit(:title, :description, :author, :category_id)
end
def find_book
@book = Book.find(params[:id])
end
def book_owner
unless current_user.id == @book.user_id
flash[:notice] = "You are not allowed to do that!"
redirect_to @book
end
end
end
Category_id为零,因为我还没有在我的第二台笔记本电脑上设置它们,因为我无法获得Category.connection(Category.create(name:“SOMECATEGORY”)使用它创建类别,但如果没有Category.connection它将无法工作
在我的heroku应用程序中,我可以执行Category.connection和Category.create….-但即使在那之后,它也不起作用
我做错了什么?一如既往地提前感谢您的帮助 由于记录无效,您将收到错误。原因是您没有正确分配
类别\u id
您需要将params[:category\u id]
更改为book\u params[:category\u id]
params[:category_id]将为您提供nil
,验证检查将失败
def create
@book = current_user.books.build(book_params)
@book.category_id = book_params[:category_id]
if @book.save
redirect_to books_path
else
render 'new'
end
end
您还需要对更新
操作进行相同的更改更新:
Started POST "/books" for 127.0.0.1 at 2018-03-29 11:13:22 +0200
Processing by BooksController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"UYKPhHA99zg5TMMwgKGk+h2OPPaCQkpkjohPRnRNQHlJB1eQF4Ooro4Tvx9VDSr3U6/H4AGoThu8jzkrwyMbUB==", "book"=>{"category_id"=>"", "title"=>"tesas", "author"=>"asdasd", "description"=>"asdasd"}, "commit"=>"Create Book"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
(0.1ms) BEGIN
(0.3ms) ROLLBACK
Rendering books/new.html.erb within layouts/application
Rendered books/_form.html.erb (10.0ms)
Rendered books/new.html.erb within layouts/application (11.9ms)
Rendered layouts/_navbar.html.erb (1.2ms)
Rendered layouts/_alerts.html.erb (0.3ms)
Completed 200 OK in 52ms (Views: 46.3ms | ActiveRecord: 0.7ms)
我想我发现了我的错误:通过web创建时,我的用户\u id为零-我在控制台上创建了相同的记录,并传递了参数user\u id-voila,works。我的user_id参数在heroku rails服务器上不传递,但在本地机器上传递。未更改任何代码行
这怎么可能呢?你能分享一些更多的信息,比如你的书模型和控制器部分吗?对不起,我不知道我在这里的帖子发生了什么,它应该已经包括在内了。我试过了,但没有用。我想知道没有你的建议,我的本地机器如何工作。。我只是试着在另一台笔记本电脑上运行我的应用程序,结果和在heroku上一样。回降。。。我甚至无法获取Book.connection/Category.connection,因为它显示未初始化的常量Book/Category。请根据您的参数发送邮件我建议的解决方案应该可以解决此问题。还要检查您是否也在heroku上获取了Category_id,或者您可以尝试在控制台上创建相同的记录
Started POST "/books" for 127.0.0.1 at 2018-03-29 11:13:22 +0200
Processing by BooksController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"UYKPhHA99zg5TMMwgKGk+h2OPPaCQkpkjohPRnRNQHlJB1eQF4Ooro4Tvx9VDSr3U6/H4AGoThu8jzkrwyMbUB==", "book"=>{"category_id"=>"", "title"=>"tesas", "author"=>"asdasd", "description"=>"asdasd"}, "commit"=>"Create Book"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
(0.1ms) BEGIN
(0.3ms) ROLLBACK
Rendering books/new.html.erb within layouts/application
Rendered books/_form.html.erb (10.0ms)
Rendered books/new.html.erb within layouts/application (11.9ms)
Rendered layouts/_navbar.html.erb (1.2ms)
Rendered layouts/_alerts.html.erb (0.3ms)
Completed 200 OK in 52ms (Views: 46.3ms | ActiveRecord: 0.7ms)
def create
@book = current_user.books.build(book_params)
@book.category_id = book_params[:category_id]
if @book.save
redirect_to books_path
else
render 'new'
end
end