2012-11-26 1 views
0

Я трехуровневую модель:Вложенные формы fields_for text_area не отображается

Пользователь has_many Спрашивает has_many исходы

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

Как и другие пользователи/вопросы здесь, на SO, я не могу получить вложенную форму для отображения на экране. Я выполнял инструкции по другим вопросам, но все же вложенное поле не отображается. Интересно, может ли кто-нибудь определить проблему в коде ниже?

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

class Ask < ActiveRecord::Base 

    attr_accessible :category, :description, :done, :followed_up, 
        :helper, :public, :date_done, :date_followed_up, :user_id, :outcomes_attributes 
    belongs_to :user, counter_cache: true 
    has_many :outcomes 
    accepts_nested_attributes_for :outcomes 

end 

Ask Controller

class AsksController < ApplicationController 

    def new 
    @ask = current_user.asks.build(params[:ask]) 
    @ask.outcomes.build 
    end 

    def create 
    @ask = current_user.asks.build(params[:ask]) 
    if @ask.save! 
     respond_to do |format| 
     format.html { redirect_to edit_ask_path(@ask) } 
     format.js 
     end 
    else 
     flash[:error] = "Something is wrong. The Ask was not saved..." 
    end 
    end 

    def edit 
    @ask = current_user.asks.find(params[:id]) 
    end 

    def update 
    @ask = current_user.asks.find(params[:id]) 
    @ask.outcomes.build 
    @ask.update_attributes(params[:ask]) 
    respond_to do |format| 
     format.html { redirect_to edit_ask_path(@ask) } 
     format.js 
    end 
    end 
end 

Главная страница Контроллер(эта форма находится на домашней странице)

class StaticPagesController < ApplicationController 

    def home 
    if signed_in? 
     @ask = current_user.asks.build(params[:ask]) 
     @ask.outcomes.build 
    end 
    end 

Формы Частичные отрисовывается на домашней странице

<% if current_user.asks.any? %> 
    <ul id="ask-list-items"> 
    <% current_user.asks.where(done: false).each do |a| %> 
      <%= form_for(a) do |f| %> 
      <li><%= a.description %></li> 
      <%= f.hidden_field :date_done, value: Date.today %> 
      <%= f.hidden_field :done, :value=>true %> 
      <%= f.submit "Mark as done", class: "btn btn-small hidden done_btn", id: "a-#{a.id}-done" %> 

      <%= f.fields_for :outcomes do |builder| %> # << These fields are not showing up 
       <%= builder.text_area :description, placeholder: "Describe the outcome...", id: "ask-message" %> 
      <% end %> 
      <%= f.submit "Save outcome", class: "btn btn-primary" %> 
      <% end %> 
    <% end %> 
    </ul> 
<% end %> 
+0

Не знаю, если магия Rails, как-то понять, что: результаты является объединение в родительский объект, в этом случае из локальной переменной 'a'. Если нет, вы должны вставить '<% @outcomes = a.outcomes%>' перед вызовом 'fields_for: results' (сохранение': results' в этой строке). – 244an

+0

Большой вызов. Вы были близки. Я добавил <% @outcomes = a.outcomes.build%>, и это сработало. Пожалуйста, сделайте свой комментарий ответом, и я буду отмечать его как решение моей проблемы. Спасибо. – kwh941

+0

У меня есть старая версия Rails, поэтому я не был на 100% уверен, спасибо. – 244an

ответ

3

При использовании символа в form_for и fields_for Rails пытается использовать переменный экземпляр с он же именем, например, @outcomes для :outcomes. Так что попробуйте (для существующих результатов):

<% @outcomes = a.outcomes %> 

перед линией с f.fields_for :outcomes....

А для новых результатов:

<% @outcomes = a.outcomes.build %> 

(последний с вкладом в владелец вопроса)

+0

Вы используете '<% @outcomes = a.outcomes.build%>' прямо перед строкой с 'fields_for'? (т. е. делать это для каждого 'a') – 244an