Rails - 2形成一个模型

时间:2013-10-18 16:25:57

标签: ruby-on-rails ruby ruby-on-rails-3

我正在努力解决这个问题,基本上我想要两个表单提交给一个模型。第一个表单完成后,将呈现第二个表单,其中包含模型所需的剩余信息。理想情况下,我想将两个返回的哈希值组合在一起并将它们保存在一起。如果有更明智的方法,请告诉我。提前谢谢。

应用程序/控制器/ books_controller.rb

class BooksController < ApplicationController

  def new
    @book = @library.books.build
    @user = current_user
  end

  def create
    @book = @library.books.build(params[:book])

    if @book.total_pages.nil?
       @book_first_page = @book
       render 'new'
    else
      @book.update_attributes(@book_first_page)

    if @book.save
      redirect_to root_path
    else
      render 'new'
      end
    end
  end
end

应用程序/视图/书籍/ new.html.erb

<% if @book.title.nil?  %>
<%= form_for [:library, @book] do |f| %>
<%= render 'shared/error_messages', object: f.object %>

<div class="form-group input-group-sm">
  <%= f.label :title, 'What is the title of the book?' %>
  <%= f.text_area :title, class: "form-control" %>
</div>

<%= f.submit "Submit Title", class: "btn btn-large btn-primary" %>
<% end %>
<% else %>
<%= form_for [:library, @book] do |f| %>
<%= render 'shared/error_messages', object: f.object %>

<div class="form-group input-group-sm">
  <%= f.label :total_pages, "How many pages?:" %>
  <%= f.text_field :total_pages, class: "form-control" %>
</div>
<%= f.submit "Submit Number of Pages", class: "btn btn-large btn-primary" %>
<% end %>

3 个答案:

答案 0 :(得分:0)

您应该考虑使用accepts_nested_attributes_for

例如,请参阅http://railscasts.com/episodes/196-nested-model-form-revised

答案 1 :(得分:0)

为什么需要以两种形式更新。只使用一种形式

答案 2 :(得分:0)

您可能还会为所有数据使用单个表单,但最初只显示表单的第一部分,然后使用javascript隐藏第一部分并在第一部分完成时显示第二部分。