Rails新表格 - >零

时间:2013-01-03 18:22:31

标签: ruby-on-rails ruby crud

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

我已经制作了一个表单,用一个字段添加一个新任务:title

但是在create方法中,我们可以看到标题被“test”

填充

但在查询中,我们可以看到“无”......任何想法?

感谢

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 个答案:

答案 0 :(得分:6)

问题在于您提取post而不是task

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

答案 1 :(得分:1)

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

class Task < ActiveRecord::Base
  attr_accessible :title
end

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

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

答案 2 :(得分:0)

确保

  

attr_accessible:title

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

<强>更新 将params [:post]改为params [:task]:

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

答案 3 :(得分:-2)

在tasks_controller.rb中,您必须具有create方法,该方法将处理POST请求并接受通过请求传递的参数。

  def create 
    task = Task.new(params[:task]) 
    task.save
  end