2013-02-10 123 views
0

圍繞Rails 3 STI以及如何使用表單,但在StackOverflow上沒有明確的答案還有很多討論。我似乎遇到了類似的問題,並嘗試了其他解決方案,但沒有結果。Rails STI:實現子類編輯表格

我有兩個型號,下面的繼承設置:

User.rb 
class User < ActiveRecord::Base 
attr_accessible :email, :first_name, :last_name, #more follows 


Waiter.rb 
class Waiter < User 

論/服務員/用戶/形式[:編號] /編輯,我試圖創建一個表單編輯服務員。不過,我在加載編輯觀點得到以下錯誤:

undefined method `waiter_path' for #<#<Class:0x007fbd08cef9d8>:0x007fbd09532fa0> 

這是/app/controllers/admin/waiters/users_controller.rb發現我的控制器:

def edit 
    form_info 
    @user = Waiter.find(params[:id]) 
    end 

    def update 
    @user = Waiter.find_by_id(params[:id]) 
    if @user.update_attributes(params[:user]) 
     flash[:notice] = "Successfully assigned Waiter." 
     redirect_to admin_waiters_users_url() 
    else 
     form_info 
     render :action => 'edit' 
    end 
    end 

這是坐落在編輯視圖形式:

<%= simple_form_for @user do |f| %> 

    <%= f.input :first_name %> 
    <%= f.input :last_name %> 
    <%= f.input :email %> 

     <%= button_tag(type: 'submit', class: "btn btn-primary") do %> 
     <i class="icon-ok icon-white"></i> Save 
     <% end %> 
    <% end %> 

我在做什麼錯在這裏與STI和路由?

更新:這是我的耙路線:

admin_waiters_users GET /admin/waiters/users(.:format)               admin/waiters/users#index 
                   POST /admin/waiters/users(.:format)               admin/waiters/users#create 
             new_admin_waiters_user GET /admin/waiters/users/new(.:format)              admin/waiters/users#new 
             edit_admin_waiters_user GET /admin/waiters/users/:id/edit(.:format)             admin/waiters/users#edit 
              admin_waiters_user GET /admin/waiters/users/:id(.:format)              admin/waiters/users#show 
                   PUT /admin/waiters/users/:id(.:format)              admin/waiters/users#update 

回答

2

你應該用你的路線看你有沒有定義什麼路線:

rake routes 

您可以運行路線我看不到你的路線,但也許waiter_path不存在。

也許是user_waiter_path(@user)或其他路由器。

請粘貼你的路由,以便在stackoverflow上的人可以幫助你。

我在您的路線上看不到路線waiter_path,如果您的edit視圖中有waiter_path視圖,請將其刪除。

此外,您可以指定哪些控制器和動作的打擊,

<%= simple_form_for @user, :url => { :controller => "admin/waiters/users", :action => "update"} do |f| %> 
<%= f.input :first_name %> 
<%= f.input :last_name %> 
<%= f.input :email %> 
<%= f.button :submit, "save", class: "btn btn-primary"%> 
<% end %> 

您可以f.button代替button_tag

祺檢查!

+0

謝謝。完全忘記包含它。 – mztwo 2013-02-10 23:42:35

+0

我編輯了我的回覆。試一把! – hyperrjas 2013-02-10 23:53:44

+0

這使表單工作。但提交按鈕沒有更新服務員用戶。任何想法爲什麼? – mztwo 2013-02-11 01:05:00