2013-06-18 4 views
11

Я создал простой проект рельсов. Все работало нормально, пока я не попытался добавить новую модель Paintings, что belongs_to и Patient, что has_many Картины через лечение. Так что некоторая вложенная форма, которую я создал, не появляется, я считаю, что она связана с контроллером! Спасибо, и привет из Германии!Rails fields_for form не отображается, вложенная форма

Обработки контроллер:

class TreatmentsController < ApplicationController 
    def create 
    @patient = Patient.find(params[:patient_id]) 
    @treatment = @patient.treatments.create(params[:treatment]) 
    redirect_to patient_path(@patient) 
    end 

    def destroy 
    @patient = Patient.find(params[:patient_id]) 
    @treatment = @patient.treatments.find(params[:id]) 
    @treatment.destroy 
    redirect_to patient_path(@patient) 
    end 
end 

И форма для лечения с nested fields_for, что не показывает:

<%= form_for([@patient, @patient.treatments.build]) do |f| %> 
    <div class="field"> 
    <%= f.label :content %> 
    <%= f.text_area :content, :cols => "30", :rows => "10" %> 
    </div> 
    <div class="field"> 
    <%= f.label :category_id %> 
    <%= f.collection_select :category_id, Category.find(:all), :id, :typ %> 
    </div> 

    <%= f.fields_for :paintings do |ff| %> 
    <div class="field"> 
     <%= ff.label :name, 'Tag:' %> 
     <%= ff.text_field :name %> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.submit nil, :class => 'btn btn-small btn-primary' %> 
    </div> 
<% end %> 

UPDATE:

Показать Сайт:

<% @patient.treatments.each do |treatment| %> 
    <tr> 
    <td><%= treatment.category.try(:typ) %></td> 
    <td><%= treatment.content %></td> 
    <td><%= treatment.day %></td> 
    <td><div class="arrow"></div></td> 
    </tr> 
    <tr> 
+3

Ьгу f.fields_for: картины, Painting.new do | m |. Кроме того, вы можете отправить код модели и код контроллера более подробно? –

+0

haha ​​ваш лучший !! Я пробовал это два дня, и теперь вы сделали это с одним укусом, чтобы добавить код! Пожалуйста, переместите свой комментарий к ответу, чтобы я мог настроить его на правильный ответ! –

ответ

50

Пожалуйста, попробуйте

= f.fields_for :paintings, Painting.new do |p| 
+0

Извините, но еще одно, как я могу показать имя изображения? –

+1

Я действительно не имею ни малейшего представления об отношениях модели или полях. можете ли вы добавить их? –

+0

Надеюсь, мое обновление достаточно? –

8

Попробуйте сделать следующее новое действие в контроллере

@patient.treatments.build 

Заканчивать build_association часть http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

Вы также должны прочитать о вложенных атрибутов. Используйте те, для справки http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

+0

Все еще не работает для меня. – fatuhoku

+1

это неправильный синтаксис. try '@ patient.treatments.build' – zx1986

9

Даже вопрос довольно старый, но вам не хватает new, что имеет решающее значение для этого вопроса. Методы destroy и create не имеют ничего с этой проблемой. Если у вас есть new метод, который выглядит примерно так:

class TreatmentsController < ApplicationController 
    def new 
    @patient = Patient.new 
    end 
end 

Тогда решение будет ли изменить метод new «строить» в paintings так:

class TreatmentsController < ApplicationController 
    def new 
    @patient = Patient.new 
    @patient.paintings.build 
    end 
end 
+2

Это должен быть принятый ответ. – saadlulu

+0

да, но эти демо-коды не имеет '.build' действия :-( https://github.com/nathanvda/cocoon_simple_form_demo/blob/master/app/controllers/projects_controller.rb#L26 – zx1986

+0

@ zx1986 Что делать вам означает «у них нет действий по сборке»? Я имею в виду, что он не должен иметь действие сборки. 'build' - это просто метод для объекта. – Aleks

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