我是ruby的新手,我正在尝试整理一个允许您向订单添加商品的表单。表单需要为订单中的每个项目获取数量。
class Order < ActiveRecord::Base
belongs_to :restaurant
has_many :selections
has_many :items, :through =>:selections;
end
class Selection < ActiveRecord::Base
belongs_to :order
belongs_to :item
end
class Item < ActiveRecord::Base
belongs_to :menu
has_many :selections
has_many :orders, :through => :selections
end
class Restaurant < ActiveRecord::Base
has_many :orders
has_many :menus
has_many :items, :through => :menus
end
class Menu < ActiveRecord::Base
belongs_to :restaurant
has_many :items
end
订单控制器
# GET /orders/new
def new
@order = Order.new
@restaurant.items.all.each do |item|
@order.selections.build
end
end
orders / _form.html.erb :
表单应列出可用的项目,并允许您输入项目的数量。
<%= form_for [@restaurant,@order], :html => { :class => 'form-horizontal' } do |f| %>
<div class="control-group">
<%= f.label :current_table, :class => 'control-label' %>
<div class="controls">
<%= f.text_field :current_table, :class => 'text_field' %>
</div>
</div>
<% f.fields_for :selections do |ff| %>
<div class="control-group">
<%= ff.label :quantity, :class => 'control-label' %>
<div class="controls">
<%= ff.text_field :quantity, :class => 'text_field' %>
</div>
</div>
<% end%>
<div class="form-actions">
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
course_orders_path, :class => 'btn' %>
</div>
<% end %>
当我尝试渲染页面时,我收到以下错误:
undefined method `quantity' for
<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Selection:0x007ffa0287cd60>
我意识到这可能是因为我没有初始化任何选择,但我不完全确定我应该如何/在哪里做。提交表单时,我想创建一个订单,其中包含每个非空数量的选择。
所以我的第一个问题是如何构建我的表单,以便我可以为我所知道的每个项目获取数量?
我是否需要初始化订单控制器中的任何内容才能使其正常工作?
您能给我任何建议或指点我一个教程,告诉我如何设置订单控制器的创建方法吗?
编辑:
我在Order控制器和表单中添加了一些代码,因此当我渲染页面时,我不再收到错误,但是没有渲染任何“选择”字段。我确认了一些日志记录和调试器,我正确地“构建”了4个选项,所以我希望这些表单元素出现。
任何想法都会受到赞赏。
答案 0 :(得分:0)
你错过了
accepts_nested_attributes_for :nested_class
某处?
另外,我必须做一些像
这样的事情<%= form_for [@restaurant,@order] do |f| %>
...
<%= f.fields_for :selections, @order.selections do |ff| %>
...
<% end %>
...
<% end %>