Rails - 直接通过浏览器URL保存模型对象

时间:2015-11-15 09:15:20

标签: ruby-on-rails

目前我的Stats模型只有一个属性:秒

有没有办法直接通过网址调用create操作,而不是通过localhost:3000/stats/new/保存?

我尝试了localhost:3000/stats/create?seconds=100的某些内容,但这看起来并不正确。

3 个答案:

答案 0 :(得分:2)

与已经收到的建议相反,你当然可以做你想做的事。

如果微软可以制造" Windows"通过编程,我确信您可以直接从URL请求创建对象。

GET vs POST

需要注意的重要事项是create方法是called ...

POST    /photos photos#create   create a new photo

这是POST请求。这意味着,如果你想加载"来自浏览器的此URL,您必须使用POST HTTP verb - 必须明确定义。

-

发表

虽然您可以使用标准POST路线 ,但如果您想明确设置secondsyou'll need to use GET:< / p>

  

...查询字符串 GET 请求的 中发送:

     

...查询字符串 POST 请求的HTTP消息正文发送:

因此,如果您想每次添加一个统计信息,可以使用以下内容:

#app/views/....
<%= link_to "Add Stat", stats_path, method: :post %>

#app/controllers/stats_controller.rb
class StatsController < ApplicationController
   def create
      @stat = Stat.create seconds: "1"
   end
end

-

获取

如果您想按照自己的要求进行操作,则必须为GET操作设置create请求:

#config/routes.rb
resources :stats do
   get :create, on: :create
end

这将允许您访问:

url.com/stats/create?seconds=100

您可以访问控制器中的params[:seconds]

#app/controllers/stats_controller.rb
class StatsController < ApplicationController
   def create
      @stat = Stat.create stat_params
   end

   private

   def stat_params
      params.permit(:seconds)
   end
end

所以要回答你的问题,它是可能的,这只是你想要的方式。

答案 1 :(得分:0)

建议您不要通过get请求创建任何模型对象。它可能会出错,但如果你真的想要创造,那么你就是这样做的。

routes.rb

resources :stats, except: [:create] do
    get "create", on: :collection
end

stats_controller.rb

def create
   stats = Stats.create(stats_create_params)
end


private

def stats_create_params
   params.permit(:second)
end

答案 2 :(得分:-1)

对不起,我不相信。根据RoR的结构,您需要一个命中控制器#action的路径,并且必须在那里创建新模型以存储在数据库中。它是框架的规则,你必须遵循它。