Ruby on rails 如何解析文本字段,然后在RubyonRails中将其写入多个模型?

Ruby on rails 如何解析文本字段,然后在RubyonRails中将其写入多个模型?,ruby-on-rails,activerecord,many-to-many,has-many-through,virtual-attribute,Ruby On Rails,Activerecord,Many To Many,Has Many Through,Virtual Attribute,我在Rails 3.1.RC4中创建了一个简单的项目+任务应用程序。它将有项目名称、任务,每个任务将分配给一个人。项目表单很简单,只有两个框(1)任务名称和(2)任务和受让人。在后端,我想解析任务和分配对象,并将它们全部放入正确的模型中 样本输入 项目名称:Pip生日派对 任务,被派遣人: 打扫浴室,约翰 擦鞋,萨利 烤蛋糕,彼得 买香槟,苏珊 它有四种型号: class Project < ActiveRecord::Base has_many :tasks

我在Rails 3.1.RC4中创建了一个简单的项目+任务应用程序。它将有项目名称、任务,每个任务将分配给一个人。项目表单很简单,只有两个框(1)任务名称和(2)任务和受让人。在后端,我想解析任务和分配对象,并将它们全部放入正确的模型中

样本输入 项目名称:Pip生日派对

任务,被派遣人:

  • 打扫浴室,约翰
  • 擦鞋,萨利
  • 烤蛋糕,彼得
  • 买香槟,苏珊
它有四种型号:

    class Project < ActiveRecord::Base
      has_many :tasks
      has_many :assignments, :through => :tasks
      has_many :people, :through => :assignments
      attr_writer :task_text
      after_save :assign_tasks
    
      def task_text
        @task_text || tasks.map(&:name).join(' ')
      end
    
      private
    
      def assign_tasks
        if @task_text
          self.tasks = @task_text.split(/\n/).map do |line|
            assignment = line.split(',').first
            assignee = line.split(',').last
            Task.find_or_create_by_name(assignment)
            Task.people.find_or_create_by_name(assignee)
          end
        end
      end
    end
    
    class Task < ActiveRecord::Base
      attr_accessible :name
      belongs_to :project
      has_many :assignments
      has_many :peoples, :through => :assignments
    end
    
    class Assignment < ActiveRecord::Base
      belongs_to :tasks
      belongs_to :peoples
    end
    
    class People < ActiveRecord::Base
      has_many :assignments
      has_many :tasks, :through => :assignments
    end
    
class项目:任务
有很多:人,:通过=>:任务
属性编写器:任务文本
保存后:分配任务
def任务_文本
@task|text| tasks.map(&:name).join(“”)
结束
私有的
def分配任务
如果@task_text
self.tasks=@task_text.split(/\n/).map do | line|
赋值=行。拆分(',')。首先
受让人=行。拆分(',')。最后
任务。按名称查找或创建任务(分配)
Task.people.find\u或\u create\u by\u name(受让人)
结束
结束
结束
结束
类任务:作业
结束
类赋值:分配
结束
以下是一个表格部分:

    <%= form_for @project do |f| %>
      <%= f.error_messages %>
      <p>
        <%= f.label :name %><br />
        <%= f.text_field :name %>
      </p>
      <p>
        <%= f.label :task_text, "Tasks, assignees" %><br />
        <%= f.text_area :task_text %>
      </p>
      <p><%= f.submit %></p>
    <% end %>
    




现在我得到了一个未定义的“人”方法错误

我已经回顾了Railscasts,涵盖了多对多模型、虚拟属性和嵌套模型,但我没有能够实现这一飞跃。我必须在没有Javascript的情况下完成这项任务。

也许只是

task = Task.find_or_create_by_name(assignment)
task.peoples.find_or_create_by_name(assignee)
task
插入

Task.find_or_create_by_name(assignment)
Task.people.find_or_create_by_name(assignee)
也许只是

task = Task.find_or_create_by_name(assignment)
task.peoples.find_or_create_by_name(assignee)
task
插入

Task.find_or_create_by_name(assignment)
Task.people.find_or_create_by_name(assignee)
我知道这很古老,但是“人”已经是复数了,所以应该是

belongs_to :people
has_many :people
等等

我知道这很古老,但是“人”已经是复数了,所以应该是

belongs_to :people
has_many :people

等等,谢谢你。我实现了它,并在ProjectsController#create
未初始化的常量任务::Peoples
中得到了一个新错误
NameError,谢谢。我实现了它,并在ProjectsController#create
未初始化的常量任务::Peoples