抱歉我的英语不好。我有一个非常奇怪的错误。当我创建任务的实例时 使用utf8内容的模型,数据库中存储的内容不是它输入的内容。 content 字段是使用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 = Task.new(params[:task])
。存储的内容也是正确的。