【问题标题】:Rails - add an array of another class on a formRails - 在表单上添加另一个类的数组
【发布时间】:2013-03-09 12:40:08
【问题描述】:

如果问题很简单,我深表歉意,我对 Rails 还很陌生。我正在构建一个膳食计划器应用程序,并试图拥有它,以便用户可以创建膳食并将项目添加到该膳食中。例如。一顿“鱼和薯条”将包括“鱼”和“薯条”。据我了解,我认为我需要一种在餐食创建表单上创建一系列项目的方法 - 但我该怎么做呢?

meal.rb的相关部分:

has_many :items
accepts_nested_attributes_for :items

和 item.rb

belongs_to :meal

我需要向部分餐单添加什么内容才能接受一系列项目?我道歉,我不知道从哪里开始!或者,如果有更简单的方法,请告诉我。但我不想在饭菜上有一个“item_1_id”、“item_2_id”等的列表!!谢谢!!

<%= form_for(@meal) do |f| %>
  <% if @meal.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@meal.errors.count, "error") %> prohibited this meal from being saved:</h2>

      <ul>
      <% @meal.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :category %><br />
    <%= f.text_field :category %>
  </div>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>

  <div class="field">
    <%= f.label :child_id %><br />
    <%= f.number_field :child_id %>
  </div>
  <div class="field">
    <%= f.label :time %><br />
    <%= f.date_select :time %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

【问题讨论】:

  • 我从我们的案例场景中发现的第一件事是,您需要拥有many to many 关系而不是one to manyAn item may belong to more than one meal. 关于将相关项目添加到膳食中,您可以使用 github.com/ryanb/nested_form gem。我是否正确理解了您的问题?
  • 是的,我想你做到了,谢谢你的建议,会调查的!

标签: ruby-on-rails arrays forms


【解决方案1】:

有一个很棒的 railscast 剧集涵盖了这一点。此外,您可能希望使用 javascript 来获得“添加项目”链接。下面这个例子,总是有一个新项目可用。

你会想做这样的事情

查看

<%= f.fields_for :items do |builder| %>
  <fieldset>

  </fieldset>
<% end %>

控制器

@meal.items.build

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

【讨论】:

  • 太棒了,谢谢你,会调查那些,看起来正是我所追求的。
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多