2011-03-23 108 views
1

我正在构建一个应用程序,我需要将行添加到来自多个其他模型的表中。Rails 3 - 在另一个模型中的多个模型形式

这是我到目前为止(抱歉的草率代码,第一个项目与红宝石/铁轨)。我意识到我仍然缺少代码中的一些关键元素以便正常工作,我只想确保我首先以正确的方式进行操作。一旦我让所有的东西都能正常工作,我也会将表格移动到一个部分。

# app/views/ticketbuilder/show.html.erb  
<ul> 
<% @event.sections.each do |s| %> 
    <li><%= s.name %></li> 
    <ul> 
    <% s.locations.each do |l| %> 
     <li><%= l.name %></li> 
    <% end %> 
    </ul> 
<% end %> 
    <li> 
    <%= form_for([:event, :ticketbuilder], :url => event_ticketbuilder_url) do |s| %> 
     <%= s.text_field(:section) %> <%= submit_tag("Add Section") %> 
     <%= s.hidden_field(:event_id, @event.id) %> 
    <% end %> 
    </li> 
</ul> 

# routes.rb 
resources :event do 
    resources :ticketbuilder 
end 

# ticketbuilder_controller.rb 
class TicketbuilderController < ApplicationController 
    def show 
    @event = Event.find(params[:event_id]) 
    end 
    def new 
    @section = Section.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @event } 
    end 
    end 
end 

# error message 
undefined method `model_name' for Symbol:Class 

我遇到的问题是将窗体发送到ticketbuilder控制器。我试图完成的是有一个座位部分的列表与子元素的位置。我希望能够直接在列表页面上添加新的部分和位置。

任何建议将不胜感激。

回答

1

有你需要改变一些东西。首先在节目行动TicketbuilderController:

# TicketbuilderController 
    def show 
    @event = Event.find(params[:event_id]) 
    @section = Section.new 
    end 

的@section变量是将在助手的form_for在随之而来的视图中使用的新科:需要的form_for的实例

# app/views/ticketbuilder/show.html.erb 
<%= form_for @section, :url => event_ticketbuilder_path(@event) do |s| %> 
    <p><%= s.text_field(:section) %></p> 
    <p><%= s.submit("Add Section") %></p> 
<% end %> 

你想创建的模型,在这种情况下是一个部分。存储event_id的隐藏字段不是必需的,因为我们将表单数据发送到包含event_id的url。该URL在传递给form_for的url属性中指定。

最后,在TicketbuilderController创建操作:

# TicketbuilderController 
def create 
    @event = Event.new(params[:event_id]) 
    @section = @event.sections.build(params[:section) 
    if @section.save 
    @section = Section.new 
    end 
    render :action => :show 
end 

的@event是用来 “构建” 一节。通过这样做,即使event_id未在表单中传递,该部分也与事件关联。如果新部分已成功保存,则将@section变量设置为一个新实例,以再次为form_for做准备。

+0

当我提交一个新的“部分”,我得到没有路线匹配“/事件/ 1/ticketbuilder/1”我认为这是有关的道路,但不知道它应该改为 – 2011-03-25 14:52:43

+0

对不起,我认为问题在于,建造者是单一的。试试:url => event_ticketbuilders_path(@event) – DanneManne 2011-03-25 16:57:11

相关问题