2013-02-10 45 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