具有多态模型的嵌套forms

我正在创建一个具有以下属性的应用程序,我正在创建一个单独的表单,以便能够保存目标,目标的任务,目标的里程碑和里程碑的任务。

#app/models/goal.rb has_many :tasks, :as => :achievement has_many :milestones accepts_nested_attributes_for :tasks accepts_nested_attributes_for :milestones #app/models/milestone.rb belongs_to :goal has_many :tasks, :as => :achievement #app/models/task.rb belongs_to :achievement, :polymorphic => true 

每当我用它的属性保存目标时,似乎任务模型对它们所属的成就类型感到困惑,导致每个里程碑任务被列为目标任务。 我的表单,部分和控制器代码如下。

形成:

   f.object %>  f %>   ff %>    ff %>      

milestone_fields partial:

      ff %>    

task_fields partial:

     

目标控制器:

 def new @goal = current_user.goals.new end def create @user = current_user @goal = @user.goals.build(params[:goal]) if @goal.save flash[:success] = "Goal created!" redirect_to goals_path else render 'new' end end 

我尝试在f.fields_for代码旁边添加@ goal.milestones.build和@ goal.tasks.build,这似乎修复了它,但导致其他问题,例如空白编辑表单(没有预先填充数据)并且里程碑和任务字段立即显示,而不是单击链接以显示空白字段。 如果你无法解决它,有没有我可以支付其他程序员帮助解决这样的小问题的网站? 我现在很绝望。

您的里程碑模型需要以下行才能接受tasks_attributes:

 # app/models/milestone.rb accepts_nested_attributes_for :tasks 

模特中的其他一切看起来都不错。 至于fields_for表单助手,传递构建将创建指定对象的新实例,这将导致您描述的空白编辑表单。 如果nested_form_for将处理构建和附加这些新表单字段,请尝试删除这些构建。

我重新创建了你的环境,当我发布我的表单时,我在服务器日志中得到以下params哈希:

 {"goal"=>{"milestones_attributes"=>{"0"=>{"content"=>"foo", "tasks_attributes"=>{"0"=>{"content"=>"bar"}}}}, "tasks_attributes"=>{"0"=>{"content"=>"baz"}}}} 

这创建了两个任务记录,一个是achievement_type’目标’,另一个是achievement_type’Milestone’

至于支付某人做这项工作, http://www.rent-acoder.com/是一个我听过的人说他们已经接受了过去的工作的网站。我不能代表代码的质量,但你可以张贴你的作品,看看你得到了什么。