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

发布路线以调试此问题会很有帮助,您的路线可能指的是门票,但您的课程是门票。您应该研究宁静的路线,特别是考虑到您的用例。看来你真的应该有一个动作控制器(ActionsController,命名为 controllers/actions_controller.rb),然后发布到创建动作并提供一个安静的路线(资源:动作)我的建议是首先阅读休息和轨道。

此外,flash 不是您应该存储ticket_id 的地方,理想情况下,您应该通过发布到 /action/ticket_action/1 并通过访问控制器中的 params[:id] 来检索 id 在您的操作控制器的创建操作中检索它。如果你真的必须,将它存储在会话中 (session[:ticket_id] = "1") 但“休息”是你应该去的地方。闪光灯将被移除,只能在控制器中设置,然后显示在下一页,之后将被删除。

更新:好的,感谢您发布您的路线。

如果需要,您可以像这样添加缺少的路线:

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

但最好遵循这种模式:

在动作控制器中:

def new
  @action = Action.new
end

你的表单应该有点像这样,Rails 会知道要发布到 actions#create 因为 @action 是一个新记录(如果你愿意,你可以检查 @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 回答