我在 Controller 中写了以下方法:
def mkpdf(certificate)
# mke the pdf folder
unless Dir.exist?("pdf")
Dir.mkdir("pdf")
end
end
在 routes.rb 中有:
get 'mkpdf' => "certificates#mkpdf"
在页面中有:
mkpdf_path(certificate)
当我点击页面的 mkpdf_path 相应的连接的时候,发生了wrong number of arguments (0 for 1)
的报错,请问我代码哪里错了?
#2 楼 @jxs471494539 action
定义时是不用包含参数的啊。而且mkpdf_path(certificate)
的用法也错了。先看看书吧。
#4 楼 @jxs471494539 先不谢。mkpdf_path
这类自动生成的 routes helpers 只是返回一个 path 链接,并不可能直接调用 controller 里边的 action。action 的调用过程应该是:路由系统判断请求的 url,结合你在 config/routes.rb 里边的定义,然后将你的请求分发到指定的 action,action 通过 params hash 读取需要的请求参数。建议你得先去读一下计算机网络方面的书籍了。
controller 的 action 方法的参数都是采用 params 来处理的,所以将 controller 中的 mkpdf 方法修改为参的就好了。。
mkpdf_path(certificate) != mkpdf(certificate)调用。 一个是个 url helper. 一个是个 action. 根本不等,所以参数传不过去,当然报错。虽然通过路由配置最后调到了 certificate/mkpdf..
#7 楼 @boyishwei 那我应该怎样才能把 certificate 这个参数传到后台 mkpdf 的 action 去?因为我后台需要对 certificate 这个对象的相关属性进行调用
# config/routes.rb
get "mkpdf/:certificate_id" => "certificate#mkpdf", :as => "mkpdf"
具体调用:
mkpdf_path(certificate_id)
关于路由建议楼主认真读下 Rails Guide 的Routing一章……
def mkpdf
certificate = Certificate.find params[:certificate_id]
# mke the pdf folder
unless Dir.exist?("pdf")
Dir.mkdir("pdf")
end
end
#9 楼 @allenfantasy #11 楼 @Martin91 感谢两位的提示,让我在登机关手机前得到提示,相信在空中可以完成我的 coding,谢谢