对不起,我的英语不好。我有一个非常奇怪的错误。 当我使用 utf8 内容创建任务模型的实例时,数据库中存储的内容不是输入的内容。内容字段是使用 ckeditor 创建的。这里是:
- 什么用户输入:
Lưu
- 参数:
{"task"=> {"name"=>"Store", "description"=>"Store", "price"=>"10000", "content"=>"<p>\r\n\tLưu</p>\r\n"}, "commit"=>"Create Task", "action"=>"create", "controller"=>"tasks"}
- 内存中的实例:
#<Task id: nil, name: "Store", description: "Store", price: 10000, created_at: nil, updated_at: nil, content: "<p>\r\n\tLưu</p>\r\n">
- 存储的内容:
#<Task id: 10, name: "Store", description: "Store", price: 10000, created_at: "2012-05-22 03:47:11", updated_at: "2012-05-22 03:47:11", content: "\\x3c703e0d0a094cc6b0753c2f703e0d0a">
但是,最奇怪的是,当我编辑该模型并保存它时,内容会在输入时存储。
这是我对内容列的迁移:
class AddContentToTasks < ActiveRecord::Migration
def change
add_column :tasks, :content, :text
end
end
这是我的控制器:
def update
@task.update_attributes!(params[:task])
end
def create
binding.pry
@task = Task.new(params[:task])
@task.user = current_user
@task.save
redirect_to tasks_path
end
当我调试(使用 binding.pry)时,我看到 @task.content 是正确的。但是,在@task.save 之后,最后创建的Task 的内容(Task.last)不是。
更新 1:我的 database.yml
development:
adapter: postgresql
encoding: utf8
reconnect: false
database: crowd
pool: 5
username: username
password: password
host: localhost
test: &test
adapter: postgresql
encoding: utf8
reconnect: false
database: crowd-test
pool: 5
username: username
password: password
host: localhost
我的 schema.rb 内容。
# encoding: UTF-8
ActiveRecord::Schema.define(:version => 20120519133158) do
create_table "tasks", :force => true do |t|
t.string "name"
t.string "description"
t.integer "price"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "user_id"
t.integer "task_type_id"
t.text "content"
t.date "expired_at"
end
end
我来自 postgre 的架构信息
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+-----------+----------+-------------+-------------+-----------------------
crowd | username | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
crowd-test | username | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
更新 2:我没有使用@task = Task.new(params[:task])
,而是自己设置了 @task 实例的所有属性。存储的内容也是正确的。