无法将简单的表单元素字符串保存到DB(Rails,SqLite)

时间:2015-01-11 10:14:55

标签: ruby-on-rails sqlite

所以我有一个简单的流程,我填写一个简单的表单,将一些基本信息保存到数据库,然后想要在页面上吐出特定于该项目的信息。

一切都按预期工作(表单提交,重定向到正确的页面(/ 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>

3 个答案:

答案 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 - chromefirebug - 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])