如何使“创建”方法可以从外部使用
这是我的方法
def add @result @log = Log.new(params[:log]) if @log.save result = "success"; else result = "fail"; end render :json => result end
这是我的routes.rb
match "/logs/add/:value/:category/:note/:own" => "logs#add"
当我尝试这个url时:
http://localhost:3000/logs/add/338/testcat/testnote/testown
并且它正确返回json并且新项目已添加到数据库中,但所有字段(value,category,note,own)都为null。
请帮忙 :(
我已经解决了上述问题,但是
如果我想通过从1个url发送到我的ruby来创建多个对象,该怎么办? 例如:
本地主机:3000 /日志/添加/ 338 / testcat / testnote / testown
上面的请求只会创建1个日志到我的数据库如果我想使用上面的解决方案创建许多日志,我必须为一个日志发送一个URL。 我希望我的ruby能够从1个url创建多个日志。 我的意思是我可以通过只向服务器发送一个URL来创建许多日志。 什么routing,method,url
应该是什么? (我听说过“ url/add/param1&¶m2
”的内容?
您正在调用Log.new(params[:log])
但请求中没有log
参数。
您可以通过更新#new
电话来解决此问题:
@log = Log.new({ :value => params[:value], :category => params[:category], :note => params[:note], :own => params[:own] })
但请记住,您将有一个更改数据库状态的GET请求。 这可能是一个安全漏洞,因为潜在的攻击者只需通过链接(来自他们的网站,电子邮件等)就可以让您更新数据库。 这可能是一个没有恶意攻击者的问题 – 谷歌会乐意跟随GET链接 – 即使你在登录后隐藏你的网站,也不可能想到Chrome可能会尝试通过“智能地”加速浏览会话的情况“在点击之前预先加载它在页面中显示的链接。
通常,所有数据更改操作都应限于POST请求
当您指定以下参数时:note
路径中的:note
,其值将以params
哈希值传递,但不会自动传递给您的模型。
params
hash将有键:value, :category, :note, :own
但不是:log
。 要正确初始化您的模型,您可以像这样做:
Log.new :value => params[:value], :category => params[:category], :note => params[:note], :own => params[:own]
要不就
Log.new params
但在最后一种情况下,您应确保params
散列中没有其他参数,但模型的属性。