【发布时间】:2014-01-12 19:27:24
【问题描述】:
我有 2 个模型
1) 项目
class Project < ActiveRecord::Base
has_many :tasks
accepts_nested_attributes_for :tasks
validates :priority, presence: true
validates_date :due_date, :after => lambda {Date.current}
validates_length_of :name, minimum: 5, maximum: 40
validates_length_of :description, minimum: 10, maximum: 200
end
2) 任务(属于 Project)
class Task < ActiveRecord::Base
belongs_to :project, dependent: :destroy
validates_length_of :name, minimum: 3, maximum: 50
end
我的控制器:
def create
@project = Project.new(project_params)
@project.save!
redirect_to projects_path
end
def new
@project = Project.new
respond_to do |format|
format.html
format.js
end
def project_params
params.require(:project).permit(:name, :description, :due_date, :priority,
tasks_attributes: [:name])
end
当我点击表单中的提交按钮时,我可以看到带有嵌套属性(任务)的请求进来了,所以它被正确保存了,但是,只有项目被保存了,不是任务。
我意识到我没有使用 field_for(因为我在运行时通过 Javascript 生成它)。
有人知道如何解决这种情况吗?
编辑:
我已经尝试project.tasks.build 进入新操作,但行为仍然存在。
到达create action的Request是:
{"utf8"=>"✓",
"authenticity_token"=>"GItsCNKllmEEYnhihDLx9QRuObWPNL4qwZBKt56Yss0=",
"project"=>{"name"=>"werwfeb3b33b",
"description"=>"rb3rb3rb3rb3rb",
"due_date"=>"2014-01-21",
"priority"=>"2"},
"tasks"=>{"0"=>{"name"=>"2e2ev"}}}
而产生任务模型的运行时字段“name”的javascript(coffeescript)函数代码是:
AddTaskComponent = ->
numberOfTasks++
$('.tasks').append("<div id='TaskTextField" + numberOfTasks + "' class='input-group'><span class='input-group-addon'>Nome" +
"</span><input type='text' id='taskname" + numberOfTasks + "' name='tasks[" + (numberOfTasks - 1) + "][name]' class='form-control' placeholder='Insira o nome da tarefa'></div>")
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 nested-attributes fields-for