0

我是一名 Rails 初学者,现在我按照指南创建一个测试项目,如下所示:

admin_controller.rb

def blogEdit
  @btnName = "更新"
  @submitURL = "blogUpdate"
  @blog=Blog.find(params[:id])
end

def blogUpdate
  @blog=Blog.find(params[:id])
  @blog.update(params[:blog])
  redirect_to "/admin/blogList"
end

blogEdit.slim

= render "blogForm"  

_blogForm.slim

=form_for :blog,url:{action: @submitURL} do |f|
=f.label  :title ,"标题"
=f.text_field :title 
=f.label  :body ,"内容"
=f.text_area :body,rows:10,style:'width:500px;'
=f.label  :author ,"作者"
=f.text_field :author
=f.hidden_field :id
=f.submit @btnName,class:'btn' 

但是当我更新博客时,我得到了错误:

Couldn't find Blog without an ID
Rails.root: /home/hxh/share/ruby/myblog

Application Trace | Framework Trace | Full Trace
app/controllers/admin_controller.rb:28:in `blogUpdate'

Request

Parameters:

{"utf8"=>"✓",
  "authenticity_token"=>"3SBp+xSft8SzA5poczxNSU1zKReO2OpZQqgESn6ZURs=",
   "blog"=>{"title"=>"违法的",
   "body"=>"的说法都是",
   "author"=>"似懂非懂",
   "id"=>"2"},

“提交”=>“更新”}

所以它表明我没有得到params[:id]

@blog=Blog.find(params[:id])

我已经按照指南进行操作,为什么我得到了结果?

4

3 回答 3

0

在您的表单中,您@submitURL为什么不使用blogUpdate_blog_path(@blog)?

于 2013-09-13T06:27:16.093 回答
0

你正在=f.hidden_field :id进入形式。所以你idparams[:blog][:id]。但id必须通过@submitURL。根据您的参数判断,该博客@submitUrl不包含id

您没有遵循指南约定,或者您的指南没有这样做。因为名称操作有共同的规则。它是editandupdate而不是你的blogEditand blogUpdate

于 2013-09-13T06:16:30.113 回答
0

提交时创建的 url 不是资源丰富的,而是应该像 /2/blogupdate 一样创建 URL,但在您的情况下它是 /blogupdate。

你可以在这里做什么改变这些行

def blogEdit
  @btnName = "更新"
  @submitURL = "/#{params[:id]}/blogUpdate"
  @blog=Blog.find(params[:id])
end
于 2013-09-13T06:17:50.383 回答