3

RESTful 资源,默认类型路由。创建事件应该如下工作:

def create
    @event = current_user.events.build(params[:event])
    if @event.save
        redirect_to @event, :flash => { :success => "Event created!" }
    else
        render :action => "new" # new_event_path
    end
end

当输入无效数据时,它再次呈现“新”视图/表单,但它会在“localhost:3000/events”URL 上呈现此视图,“index”操作/视图应该在该位置。

我的活动路线似乎应该是可以预测的:

    resources :events

我刚刚更新到 Capybara 2,开始使用 DatabaseCleaner,并将 transactional_fixtures 设置为 false 以准备测试一些支持 JS 的功能,但我想不出任何其他方式我可能已经把它塞满了。

是否有一些我遗漏的简单事情可能会导致像这样奇怪的路由混乱?

想法,任何人,从哪里开始排除故障?

4

2 回答 2

1

这是正确的行为。发生的事情是它在发出创建操作时使用该 URL 的 POST 方法。在 URL 处使用 GET 将是索引操作。另请注意,呈现不同的模板不会更改 URL(这需要重定向)。

查看 Rails 路由文档中的第 2.2 节:http: //guides.rubyonrails.org/routing.html

于 2013-01-29T04:03:42.483 回答
0

当您从提交表单创建事件时,您使用 post 方法到 /events 路由。当数据变为无效时,rails 在 /events 地址为您的 /events(POST) 请求呈现事件/新事件。

但是你可以

redirect_to action: "new", event: @event.attributes  

并添加到新动作

@item = Item.new(params[:item].except('protected attributes','created_at', 'updated_at', 'id'))    
于 2013-01-29T04:41:28.960 回答