我在 _form :<%= simple_form_for(@post, url: blog_path) do |f| %>
中遇到了这一行,这给了我错误:
No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]
请记住,在我的路线中,我有:resources :blog, controller: 'posts'
,也就是说我正在处理MVC的帖子,但我希望/ posts /被替换为/博客/路线。
posts_controller
def new
@post = Post.new
end
def edit
end
当我转到edit
时_form工作,但不能创建new
。
路由
blog_index GET /blog(.:format) posts#index
POST /blog(.:format) posts#create
new_blog GET /blog/new(.:format) posts#new
edit_blog GET /blog/:id/edit(.:format) posts#edit
blog GET /blog/:id(.:format) posts#show
PATCH /blog/:id(.:format) posts#update
PUT /blog/:id(.:format) posts#update
DELETE /blog/:id(.:format) posts#destroy
答案 0 :(得分:2)
model_path
默认情况下,Rails中的路由逻辑导致blog#show
=&gt; /blogs/:id
将其更改为blogs_path
。
确保它看起来像resources :posts, :as=>"blogs"
,都是复数。
<强> UPD 强>
如果你想只有一个博客,那么resource :post, :as=>"blog"
,都是单数。
但这意味着一个实际的输入。我很确定你会谈到blog/post1
,blog/post2
,否则我称其为博客时没有任何意义?
答案 1 :(得分:2)
<%= simple_form_for(@post, url: blog_path) do |f| %>
在此行中,您将表单重定向到show(blog_path)
但是,根据路线,节目需要一个id (博客GET / blog /:id(。:format))。
您必须在控制器中创建一个“创建”方法,该方法接收参数strong ...
您可以使用另一种方法:rails生成scaffold_controller帖子
这将构建完整的CRUD,因此您只需配置参数
我希望能帮到你
答案 2 :(得分:0)
我以这种方式充分利用了这两个世界:
resources :blog, to: 'posts'
resources :posts