围绕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
答案 0 :(得分: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
问候!