编辑 config/routes.rb,将 create action 定义为使用 get 方法亦可访问:
resources :posts do
collection do
get 'create', as: :create
end
end
重新启动 rails server,访问 http://localhost:3000/posts/new,现在我们已经可以在发表新 post 的时候上传图片至七牛云存储。
[b]提示:[/b]
文件将会上传到名为 konata 的公开空间(bucket)。
我们没有在代码中指定 key,七牛云存储默认会使用根据文件内容计算的 hash (etag) 值做为 key。这种做法可以非常简单地避免内容相同的文件存储多份浪费空间。
由于上传表单将会直接提交到七牛云存储服务器,我们的应用程序后端无法获得 title 等业务对象字段,我们使用七牛云存储 API 的 [url=http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar]自定义变量[/url] 和 [url=http://developer.qiniu.com/docs/v6/api/overview/up/response/response-body.html]自定义响应内容[/url] 功能,通过七牛云存储上传 API 中转获得这些字段。
展示用户上传的图片
修改 app/helpers/application_helper.rb,添加 qiniu_image_url 方便生成图片 URL。为了保持简单我们直接硬编码了空间的域名:
def qiniu_image_url(post, format = :raw)
url = "http://7xokus.com2.z0.glb.qiniucdn.com/#{post.qiniu_hash}"
case format
when :square
url << '?imageView2/1/w/300/h/300/q/90'
when :preview
url << '?imageView2/2/w/1000/h/1000/q/90'
when :raw
url << "?attname=#{post.filename}"
else
url
end
end
[url=http://localhost:3000]http://localhost:3000[/url],现在用户需要注册登录才能发表图片了。
实现点赞功能
最后,做为一个社交应用,没有点赞功能怎么能让点赞狂魔们满足呢?!我们将添加一个 like scaffold 用来处理点赞和存储点赞信息。
执行以下命令生成 scaffold,Like model 将做为一个 join model 同时从属于 Post 和 User:
[url=http://guides.rubyonrails.org/]Ruby on Rails Guides[/url]
[url=http://developer.qiniu.com/]七牛开发者中心[/url]
[b]示例代码[/b]
[url=https://github.com/rainux/konata-sample]https://github.com/rainux/konata-sample[/url]
比起直接试用示例代码,你应该按照教程自己编写这些代码,亲自编写代码有助于加深理解和记忆。