Я трехуровневую модель:Вложенные формы 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 %>
Не знаю, если магия Rails, как-то понять, что: результаты является объединение в родительский объект, в этом случае из локальной переменной 'a'. Если нет, вы должны вставить '<% @outcomes = a.outcomes%>' перед вызовом 'fields_for: results' (сохранение': results' в этой строке). – 244an
Большой вызов. Вы были близки. Я добавил <% @outcomes = a.outcomes.build%>, и это сработало. Пожалуйста, сделайте свой комментарий ответом, и я буду отмечать его как решение моей проблемы. Спасибо. – kwh941
У меня есть старая версия Rails, поэтому я не был на 100% уверен, спасибо. – 244an