2011-03-23 125 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

相關問題