Rails嵌套表单对象在其他控制器中

时间:2013-07-20 08:27:12

标签: ruby-on-rails forms routing zurb-foundation nested-resources

现在试图让这项工作大约12个小时后,我不得不求助于SO来获得救赎。这是场景。

我正在使用zurb foundation 4,我正在尝试为我的仪表板中的嵌套资源制作一个揭示模式ajax表单。

我有以下嵌套资源:

  resources :lessons, only: [:index, :edit, :show] do
    resources :notes, only: [:new, :create, :edit, :delete]
  end

形式在课程/ 1 /笔记/新工作正常。

我的static_pages / home上有一张表,如下所示:

  <table>
    <thead>
    <tr>
      <th>Student</th>
      <th>Subject</th>
    </tr>
    </thead>
<% @lessons.each do |lesson| %>
    <tr>
      <td><%= link_to lesson.student.name, lesson %></td>
      <td><%= lesson.subject.name %></td>
      <td><%= link_to 'make a note', new_lesson_note_path(lesson), "data-reveal-id"=>"note-for" %></td>
    </tr>
<% end %>

在我的所有标记下,我在基础揭示模式中有以下形式:

<!--Reveal Form-->
<div id="note-for" class="reveal-modal">
<% @lessons.each do |lesson| %> <--form now associated with proper object-->
  <%= form_for Note.new, :url => new_lesson_note_path(lesson) do |f| %>
      <div class="field">
        <%= f.label :content %>
        <%= f.text_area :content %>
      </div>
      <div class="actions">
        <%= f.submit "Save", class: "small button"%>
      </div>
  <% end %>
  <a class="close-reveal-modal">&#215;</a>
  <% end %>
</div>

模态呈现正常,但提交表单会引发以下错误:

No route matches [POST] "/lessons/1/notes/new"

我在这里真的很茫然,请帮助。

2 个答案:

答案 0 :(得分:2)

我认为你使用@lessons变量犯了一个错误。你正在传递与url helper的模型关系,而不是模型。

要解决它,请尝试:

#controller
@lesson = Lesson.find(params[:lesson_id])

#view
...
<%= form_for Note.new, :url => new_lesson_note_path(@lesson) do |f| %>
...

答案 1 :(得分:1)

最后!

经过13个小时的修补,解决方案!

在揭密模态div

中添加一个循环
<div id="note-for" class="reveal-modal">
   <% @lessons.each do |lesson| %>
    .......
   <% end %>
</div>

确保notes_controller.rb操作格式正确

  def create
    @lesson = Lesson.find(params[:lesson_id])
    @note = @lesson.notes.build(params[:note])
    if @note.save
    respond_to do |format|
      format.html { redirect_to root_path, notice: 'Lesson noted!' }
      format.js
    end
    else
      redirect_to root_path
    end
  end

现在我去了酒吧!谢谢你