0

关于 Rails 3 STI 以及如何使用表单有很多讨论,但 StackOverflow 上没有明确的答案。我似乎遇到了类似的问题,并尝试了其他解决方案但没有结果。

我有两个具有以下继承设置的模型:

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


Waiter.rb
class Waiter < User

在 /waiters/users/[:id]/edit 的表单上,我正在尝试创建一个用于编辑服务员的表单。但是,加载编辑视图时出现以下错误:

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
4

1 回答 1

2

您应该使用您的路线来查看您定义的路线:

您可以使用以下方式运行您的路线:

rake routes

我看不到您的路线,但可能waiter_path不存在。

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

请粘贴您的路线,以便 stackoverflow 上的人员可以为您提供帮助。

我在您的路线上看不到waiter_path路线,如果您在视图waiter_path内,edit则将其删除。

此外,您可以指定什么控制器和动作命中,

<%= 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

问候!

于 2013-02-10T23:27:24.197 回答