0

Rails 3 STIとフォームの使用方法については多くの議論がありますが、StackOverflowに関する決定的な答えはありません。同様の問題が発生し、他の解決策を試しても結果が得られなかったようです。

次の継承が設定された2つのモデルがあります。

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 に答える