Как мне проанализировать текстовое поле и затем записать его в несколько моделей в Ruby on Rails? - PullRequest
1 голос
/ 23 июля 2011

У меня есть простое приложение проекта + задачи, которое я создаю в Rails 3.1.RC4.Он будет иметь имена проектов, задачи, и каждая задача будет назначена человеку.Форма проекта проста только с двумя полями (1) имя задачи и (2) задачи и уполномоченного.Что касается бэкэнда, я хотел бы проанализировать задачи и сотрудников и поместить их все в нужные модели.

Пример ввода

Название проекта: День рождения для Пипа

Задание, цессионарий:

  • Чистая ванная, Джон
  • Чистка обуви, Салли
  • Выпекать торт, Питер
  • Купить шампанское, Сьюзен

У него четыре модели:

    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

Вот одна частичная форма:

    <%= 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.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Я знаю, что это старый, но "люди" уже во множественном числе, поэтому должно быть

belongs_to :people
has_many :people

и т.

0 голосов
/ 23 июля 2011

Может быть, просто

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...