2013-09-26 5 views
1

я с аналогичной проблемой для has_many nested form with a has_one nested form within ithas_many вложенные формы с has_one внутри

В основном пытаются создавать задачи, в то же время я создаю клиент, некоторые из этих задач могут быть повторяющимися, которая осуществляется через отношение has_one к повторяющейся модели.

So.

Клиент Модель

attr_accessible :tasks_attributes 
    has_many :tasks, dependent: :destroy 
    accepts_nested_attributes_for :tasks, :allow_destroy => true, :reject_if => lambda { |t| t['task_type'].blank? } 

модель Задача

 belongs_to :client 
    has_one :recurring, :dependent => :destroy 
    accepts_nested_attributes_for :recurring, :reject_if => lambda { |t| t['recurring_type'].blank? } 
    attr_accessible :recurring_attributes 

Clients_controller

def new 
@client = Client.new 
@task = @client.tasks.build 

Client/_form

<table id="tasks" class="table table-striped"> 
     <%=f.simple_fields_for :tasks, :wrapper => false do |task|%> 
     <tr class="fields> 
       <td><%=task.input :task_type, :label => "Task Type", :collection => Task::TASK_TYPES %></td> 
       <td> 
        <%= task.simple_fields_for :recurring, @task.build_recurring do |recur|%> 
        <%= recur.input :recurring_type, :as => :select, :collection => Recurring::RECUR_TYPES %> 
        <%end%> 
       </td> 
       <td><%= task.input :due_date, :as => :datepicker, :label => "Next Due Date"%></td> 
       <td><%= task.link_to_remove "Remove this task" %></td> 
      <%end%> 
     </tr> 
     </table> 
     <%= f.link_to_add "Add a task", :tasks, :data => { :target => "#tasks" } %> 

Я могу получить форму для правильной отображения, и теперь она добавляет и удаляет задачи правильно. Но когда я представляю я получаю

undefined method `build_recurring' for nil:NilClass 

Я теперь на 5-й попытки сделать это по-разному, и это сводит меня с ума.

Любые идеи, что я делаю неправильно?

+0

Как выглядит эта повторяющаяся модель? У вас есть задачи в ассоциации с моделью Recurring - существует ли она? – Pasted

+0

Повторяющаяся модель принадлежит _to задаче. Он в основном просто содержит критерии повторения задачи, где это необходимо. – Carpela

+0

У меня может возникнуть соблазн денормализовать структуру базы данных abit, если повторяющаяся модель содержит только атрибут recurring_type и помещается в Task. Однако помимо этого вы пробовали ассоциации simple_form https://github.com/plataformatec/simple_form#associations? Возможно, что-то вроде <% = task.association: recurring, collection: Recurring :: RECUR_TYPES%> – Pasted

ответ

1

Вопрос идет из-за reject_if. Он отклоняет пустые поля, которые возникают при ошибке, и из-за этого это поле не отображается.

Удаление reject_if для пустого может быть изменено на nil, и после этого валидация может обрабатываться как регулярная проверка, как обрабатываемая.

+0

По-прежнему не решает проблему. то есть все еще не удается добавить несколько задач с повторяющимися данными. – Carpela

Смежные вопросы