所以我有一个简单的流程,我填写一个简单的表单,将一些基本信息保存到数据库,然后想要在页面上吐出特定于该项目的信息。
一切都按预期工作(表单提交,重定向到正确的页面(/ books /:id),但是一旦我在该页面,我无法提取我保存的字符串,如果我使用{{1查询数据库我得到以下结果,表明记录已成功插入,但似乎没有select * from books;
字符串。
name
正如您所看到的,表单正在提交并且成功创建了书籍记录,但未插入“4||2015-01-11 09:59:48.177701|2015-01-11 09:59:48.177701
”字符串。
非常感谢!!
我的新书形式(name
)
/app/views/books/new.html
books_controller.rb
<h1>Create a new e-book</h1>
<%= form_for @book do |f| %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p class="button"><%= f.submit %></p>
<% end %>
book.rb模型
class BooksController < ApplicationController
def index
@books = Book.all
end
def new
@book = Book.new
end
def show
@book = Book.find(params[:id])
end
def create
@book = Book.new(params[:book])
redirect_to @book
end
private
def book_params
params.require(:book).permit(:name)
end
end
我创建表的迁移文件
class Book < ActiveRecord::Base
end
展示页面(class CreateBooks < ActiveRecord::Migration
def change
create_table :books do |t|
t.string :name
t.timestamps
end
end
end
)
app/views/books/show.html.erb
路线
<p>Books view</p>
<p>
<strong>Book Name:</strong>
<%= @book.name %>
</p>
答案 0 :(得分:0)
尝试:
@book = Book.create(book_params)
而不是
@book = Book.new(book_params)
@book.save
答案 1 :(得分:0)
您的代码似乎没问题,所以要调试它,您可以执行以下操作
1)打开rails控制台并尝试创建保存记录
Book.create!(name: 'sample name')
如果这有效,那就意味着你的模型部分有效,所以它与控制器和参数有关。如果这不起作用,请发布错误日志,因为它可能会提供一些线索。
2)运行您的rails服务器并尝试从您的页面保存记录。观察从网页传递给控制器的参数。 (您可以使用chrome dev tools - chrome
或firebug - firefox
。这样您就可以了解实际值是否传递给控制器
3)使用某种调试工具(如pry)并在创建函数后在控制器中
def create
binding.pry
... code ..
end
并尝试检查你得到的参数
HTH
答案 2 :(得分:0)
从gemfile
运行bundle
命令中删除protected_attributes gem,重新启动服务器并尝试创建一本书。如果您想保留protected_attributes gem,请执行<{1}}操作
create
然后在你的模型中你做
@book = Book.new(params[:book])