1

任务模型只有一个字段:标题。

我制作了一个表格来添加一个带有一个字段的新任务:标题

但是在create方法中,我们可以看到title是用“test”填充的

但在查询中,我们可以看到“nil”……有什么想法吗?

谢谢

Started POST "/tasks" for 127.0.0.1 at 2013-01-03 13:16:44 -0500
Processing by TasksController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"iWaK1QX6VCyeUCueLrRNErJEtdm/ZNxg4d3LU0vKjnY=", "task"=>{"title"
=>"test"}, "commit"=>"Add a new task "}
   (0.1ms)  begin transaction
  SQL (0.9ms)  INSERT INTO "tasks" ("created_at", "title", "updated_at") VALUES (?, ?, ?)  [["created_at", Thu, 03  Jan 2013 18:16:44 UTC +00:00], ["title", nil], ["updated_at", Thu, 03 Jan 2013 18:16:44 UTC +00:00]]
   (0.8ms)  commit transaction
Redirected to http://0.0.0.0:3000/tasks
Completed 302 Found in 8ms (ActiveRecord: 1.8ms)

这是创建方法

  def create
    @task = Task.new(params[:post])

    if @task.save
      redirect_to tasks_path, :notice => "Task successfully saved"  
    else
      render "new"
    end
  end
4

4 回答 4

6

问题是您正在获取post而不是task

@task = Task.new(params[:task])
于 2013-01-03T18:31:59.633 回答
1

确保您的属性是可访问的,否则您将无法对其进行批量分配更改:

class Task < ActiveRecord::Base
  attr_accessible :title
end

你应该有单元测试来正确地运行你的模型,以确保它们可以像你在控制器中那样被更新。这些将很快发现任何未正确标记的属性。

Rails 2.3 和之前的版本对此并不严格,你可以批量分配任何东西,但 Rails 3 不会分配这些属性,除非它们被特别允许。

于 2013-01-03T18:30:42.797 回答
0

确保

attr_accessible :标题

在您的任务模型中(task.rb)

更新: 将 params[:post] 更改为 params[:task]:

@task = Task.new(params[:task])
于 2013-01-03T18:31:07.400 回答
-2

在您的 tasks_controller.rb 中,您必须有 create 方法来处理POSTrequest 并接受通过 request 传递的参数。

  def create 
    task = Task.new(params[:task]) 
    task.save
  end
于 2013-01-03T18:28:13.043 回答