使用多模式窗体在rails 3中创建新对象

时间:2012-08-23 08:34:09

标签: ruby-on-rails ruby-on-rails-3.2 multi-model-forms

关于rails,我是n00b。我正在尝试在我的第一个rails3项目中创建单个多模型表单。详情如下:

class Item < ActiveRecord::Base
  # attr_accessible :title, :body
  has_many :item_reviews, :dependent => :destroy
  accepts_nested_attributes_for :item_reviews
end

class ItemReview < ActiveRecord::Base
  # attr_accessible :title, :body
  belongs_to :item
end

所以很清楚,一个项目可以有多个评论但是当我创建一个项目时,我想要至少1个评论。因此,我希望在项目创建时以单一形式获取项目和第一次审核。

我正在使用以下视图:

<%provide(:title,'Create')%>
<h1> Add an Item review</h1>

<div class="row">
  <div class="span6 offset3">
    <%= form_for (@item) do |f| %>

      <%= f.label :name %>
      <%= f.text_field :name %>

      <% f.fields_for :item_reviews, @item.item_reviews do |ff| %>
        <%= ff.label :shop_address %>
        <%= ff.text_field :shop_address %>
      <% end %>

      <%= f.submit "Submit", class: "btn btn-large btn-primary" %>

    <% end %>

  </div>
</div>

<% f.fields_for :item_reviews, @item.item_reviews do |ff| %>无效,因为当前没有与@item关联的item_review(@item = Item.new)在我保存@item之前,我无法创建新的item_review。在这种情况下我该怎么做。

我知道一种可能性是模型独立的形式,但我不能使用上面的东西来简化生活。

PS:我正在使用bootstrap,以防万一有用。

1 个答案:

答案 0 :(得分:1)

有一些方法可以实现项目评论的实例。关键是使用一些嵌套实例创建一个实例而不实际保存

@item = Item.new
@item.item_reviews.build

然后以您的形式

form_for @item do |f|
...
  f.fields_for :item_reviews do |ff|

使用此代码存在审核实例,您可以呈现表单