0

对不起,我的英语不好。我有一个非常奇怪的错误。 当我使用 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 实例的所有属性。存储的内容也是正确的。

4

0 回答 0