如何使“创建”方法可以从外部使用

这是我的方法

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&&param2 ”的内容?

您正在调用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散列中没有其他参数,但模型的属性。