0

これは、ルーティングされていると思われるエラーです。これがエラーです

{:action="ticket_action", :controller="tickets"} に一致するルートはありません

このコードの後に​​このエラーが発生します

<h4>New Action</h4>
<% form_tag :action => 'ticket_action' do %>
<p><b>Description</b><br/>
    <%= text_area 'description', 'description', 'rows' => 5 %><br/>
    User: <%= select("actUser", "user_id", User.find(:all).collect{|u| [u.name, u.id] } )%>
    <% end %>

これを私の ticket_controller.rb に持っているのは、その適切な配置です

#action
def ticket_action
  @act = Action.new(
        "ticket_id" => flash[:ticket_id],
        "description" => params[:description]['description'],
        "user_id" => params[:actUser]['user_id']
    )


routes
    actions GET    /actions(.:format)          actions#index
            POST   /actions(.:format)          actions#create
 new_action GET    /actions/new(.:format)      actions#new
edit_action GET    /actions/:id/edit(.:format) actions#edit
     action GET    /actions/:id(.:format)      actions#show
            PUT    /actions/:id(.:format)      actions#update
            DELETE /actions/:id(.:format)      actions#destroy
    tickets GET    /tickets(.:format)          tickets#index
            POST   /tickets(.:format)          tickets#create
 new_ticket GET    /tickets/new(.:format)      tickets#new
edit_ticket GET    /tickets/:id/edit(.:format) tickets#edit
     ticket GET    /tickets/:id(.:format)      tickets#show
            PUT    /tickets/:id(.:format)      tickets#update
            DELETE /tickets/:id(.:format)      tickets#destroy
      users GET    /users(.:format)            users#index
            POST   /users(.:format)            users#create
   new_user GET    /users/new(.:format)        users#new
  edit_user GET    /users/:id/edit(.:format)   users#edit
       user GET    /users/:id(.:format)        users#show
            PUT    /users/:id(.:format)        users#update
            DELETE /users/:id(.:format)        users#destroy
    clients GET    /clients(.:format)          clients#index
            POST   /clients(.:format)          clients#create
 new_client GET    /clients/new(.:format)      clients#new
edit_client GET    /clients/:id/edit(.:format) clients#edit
     client GET    /clients/:id(.:format)      clients#show
            PUT    /clients/:id(.:format)      clients#update
            DELETE /clients/:id(.:format)      clients#destroy
4

2 に答える 2

0

この問題をデバッグするためにルートを投稿すると役に立ちます。クラスがチケットであってもルートがチケットを参照している可能性があります。特にユースケースを考えると、安らかなルートを調べる必要があります。アクション コントローラー (コントローラー/actions_controller.rb という名前の ActionsController) を実際に用意してから、create アクションに投稿し、安らかなルート (resources :actions) を提供する必要があるようです。

さらに、フラッシュは ticket_id を保存する場所ではありません。理想的には、/action/ticket_action/1 に投稿し、コントローラの params[:id] にアクセスして ID を取得することにより、アクション コントローラの作成アクションで取得する必要があります。本当に必要な場合は、セッション (session[:ticket_id] = "1") に保存しますが、'rest' は向かうべき場所です。フラッシュは削除され、コントローラーにのみ設定され、次のページに表示されます。その後、フラッシュは削除されます。

更新: ルートを投稿していただきありがとうございます。

必要に応じて、不足しているルートを次のように追加できます。

resources :tickets do
  member do
    post 'ticket_action'
  end
end

ただし、次のパターンに従う方がよいでしょう。

アクションコントローラーで:

def new
  @action = Action.new
end

@action は新しいレコードであるため、Rails は actions#create に投稿することを認識します (必要に応じて @action.new_record? を確認できます)。

<%= form_for @action do |f| %>
  <%= f.text_area :description, :rows => 5 %>
  <%= f.hidden_field :ticket_id, flash[:ticket_id] %>
  <%= f.select :user_id, User.find(:all).collect{|u| [u.name, u.id] } %>
  <%= f.submit "Create" %>
<% end %>

次に、アクションコントローラーで:

def create
  @action = Action.new(params[:action])
end

または少ない魔法で:

def create
  @action = Action.new(:user_id => params[:action][:user_id],
                    :description => params[:action][:description],
                    :ticket_id => params[:action][:ticket_id])
  if @action.save
    redirect_to actions_path(@action, :notice => "Created action")
  else
   render :new # any errors will be in @action.errors
  end
end

ただし、アクションコントローラーの新しいメソッドで ticket_id を実際に設定する必要があります。

def new
  @action = Action.new(:ticket_id => params[:ticket_id])
end

そして、あなたのフォームで:

<%= f.hidden_field :ticket_id %>
于 2013-03-29T00:32:30.403 に答える
0

ファイル名は複数形の「tickets_controller.rb」にする必要があります。

于 2013-03-29T00:50:59.407 に答える