目前我的Stats
模型只有一个属性:秒
有没有办法直接通过网址调用create
操作,而不是通过localhost:3000/stats/new/
保存?
我尝试了localhost:3000/stats/create?seconds=100
的某些内容,但这看起来并不正确。
答案 0 :(得分:2)
与已经收到的建议相反,你当然可以做你想做的事。
如果微软可以制造" Windows"通过编程,我确信您可以直接从URL请求创建对象。
GET vs POST
需要注意的重要事项是create
方法是called ...
POST /photos photos#create create a new photo
这是POST
请求。这意味着,如果你想加载"来自浏览器的此URL,您必须使用POST
HTTP verb - 必须明确定义。
-
发表强>
虽然您可以使用标准POST
路线 ,但如果您想明确设置seconds
,you'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的路径,并且必须在那里创建新模型以存储在数据库中。它是框架的规则,你必须遵循它。