Rails 3:按URL创建新记录

时间:2012-01-26 18:48:40

标签: ruby-on-rails activerecord http-post

所有

通过将所有参数传递到URL内而不是从Web表单中传递新记录的正确语法是什么?

我想要一个不同的计算机系统,以便能够连接URL并在我的Rails应用程序中创建新记录。

但是,当我尝试在" Scores"中创建新唱片时,Rails不会添加它。

    http://myapp.heroku.com/scores?message_id=51&subscriber_id=167&amount=3&method=post

要添加到新分数记录的所需属性是message_id,subscriber_id和amount。

这是Heroku日志

    2012-01-26T18:27:34+00:00 app[web.1]: Started GET "/scores?message_id=51&subscriber_id=167&amount=3&method=submit" for 122.17.234.171 at 2012-01-26 10:27:34 -0800
    2012-01-26T18:27:34+00:00 app[web.1]:   Processing by ScoresController#index as HTML
    2012-01-26T18:27:34+00:00 app[web.1]:   Parameters: {"message_id"=>"51", "subscriber_id"=>"167", "amount"=>"3", "method"=>"post"}
    2012-01-26T18:27:34+00:00 app[web.1]: Rendered scores/index.html.erb within layouts/application (3.4ms)
    2012-01-26T18:27:34+00:00 app[web.1]: Completed 200 OK in 16ms (Views: 4.2ms | ActiveRecord: 10.6ms)
    2012-01-26T18:27:34+00:00 heroku[router]: GET postopmobile.heroku.com/scores dyno=web.1 queue=0 wait=0ms service=55ms status=200 bytes=7605

这是我的分数模型

    class Score < ActiveRecord::Base

     belongs_to :message
     belongs_to :subscriber

    end

分数控制器拥有所有标准的Rails CRUD脚手架,加上这个(我正在运行Devise):

    before_filter :authenticate_user!, :except => [:new, :create] 

最后,在上述网址末尾尝试方法=提交也不起作用。

有什么想法?我试图弄清楚它只是一个语法问题还是更深层次的Rails创建问题。

感谢。

2 个答案:

答案 0 :(得分:1)

默认情况下,Ruby on Rails中的新记录是使用POST创建的。如果您想使用GET请求创建它们(我建议您反对),您需要创建一个指向create操作的自定义路由。有关路线的更多信息,请参阅:http://guides.rubyonrails.org/routing.html

答案 1 :(得分:0)

您需要POST请求而不是GET。它不适用于在url处传递'method'。 如果您真的想这样做,可以添加自定义路线,例如:

resources :scores do
 get :make
end

然后在控制器上添加'make'动作,创建新记录。

但这非常不安全。