Я делаю приложение со следующими атрибутами, и я работаю над созданием единой формы, чтобы иметь возможность сохранять цель, задачи цели, вехи цели и задачи вехи.
#app/models/goal.rb
has_many :tasks, :as => :achievement
has_many :milestones
accepts_nested_attributes_for :tasks
accepts_nested_attributes_for :milestones
#app/models/milestone.rb
belongs_to :goal
has_many :tasks, :as => :achievement
#app/models/task.rb
belongs_to :achievement, :polymorphic => true
Всякий раз, когда я сохраняю цель с ее атрибутами, кажется, что модели задач запутываются в том, к какому типу достижений они принадлежат, в результате чего каждая важная задача просто указывается в качестве целевой задачи. Моя форма, частичные и код контроллера ниже.
Форма:
<%= nested_form_for @goal do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<%= render 'shared/goal_fields', :f => f %>
<%= f.fields_for :milestones do |ff| %>
<%= render 'shared/milestone_fields', :f => ff %>
<% end %>
<%= f.fields_for :tasks do |ff| %>
<%= render 'shared/task_fields', :f => ff %>
<% end %>
<%= f.link_to_add "Add Milestone", :milestones %>
<%= f.link_to_add "Add Task", :tasks %>
<%= f.submit %>
<% end %>
частичное milestone_fields:
<%= f.label :content, "Milestone" %>
<%= f.text_field :content %>
<%= f.fields_for :tasks do |ff| %>
<%= render 'shared/task_fields', :f => ff %>
<% end %>
<%= f.link_to_remove "Remove milestone" %>
<%= f.link_to_add "Add Milestone Task", :tasks %>
частичное_поля полей:
<%= f.label :content, "Task" %>
<%= f.text_field :content %>
<%= f.link_to_remove "Remove Task" %>
контроллер цели:
def new
@goal = current_user.goals.new
end
def create
@user = current_user
@goal = @user.goals.build(params[:goal])
if @goal.save
flash[:success] = "Goal created!"
redirect_to goals_path
else
render 'new'
end
end
Я попытался добавить @ goal.milestones.build и @ goal.tasks.build рядом с кодом f.fields_for, который, кажется, исправил его, но приводит к другим проблемам, таким как пустая форма редактирования (данные не -пополнено), а также поля вех и задач, которые отображаются сразу, вместо того, чтобы щелкнуть ссылку, чтобы открыть пустое поле. Если вы не можете решить эту проблему, есть ли сайты, где я могу заплатить другим кодировщикам за помощь в решении небольшой проблемы, подобной этой? Я в отчаянии в этот момент.