我在编辑视图中有多个表单,如下所示:
查看
-@posts.each do |post|
.form
= simple_form_for post, url: update_posts_path do |f|
= f.input :title
= f.submit
然后当我更新任何表格时,我收到此错误'找不到没有ID的Pots'。您可以在此处查看控制器和路径文件:
控制器
def update
@post = Posts.find(params[:id]) //If I change it for Posts.first then is working
if @post.update_attributes(params.require(:posts).permit(:title))
redirect_to ....
else
flash[:notice] = "Sorry."
render :edit
end
end
路线档案
resources :posts, :only => [:index, :edit, :update] do
get "edit", :on => :collection, :as => :edit
patch "update", :on => :collection, :as => :update
end
我认为错误是由于某种原因(@ post = Posts.find(params [:id]))返回一个nil对象,然后控制器无法更新它。有人可以帮我一把吗?
答案 0 :(得分:4)
错误是:on => :collection
部分。这允许在没有id的情况下调用操作,因此params[:id]
为空。
:on => :collection
通常用于索引类似于一组记录的操作,因此不需要id部分。
get "edit", :on => :collection, :as => :edit
patch "update", :on => :collection, :as => :update
是多余的,第一行:
resources :posts, :only => [:index, :edit, :update]
告诉Rails它需要的一切。
答案 1 :(得分:0)
对于更新操作,您使用的是:on => :collection
,但您的请求已被置/补丁请求,因此您将使用patch "update", :on => :member, :as => :update
根据您的路线更改form_for。使用<%=simple_form_for post ,:url=> update_post_path(post) do |f| %>
代替{ {1}}
关于url: update_posts_path
params.require(:posts).permit(:title)
代替posts
post
缺少您将使用:id
代替params.require(:post).permit(:title,:id)