url_for 在控制台和控制器中给出不同的输出 - Rails 5
url_for gives different output in console versus controller - Rails 5
每当使用 sferik/twitter gem 创建新插件时,我都会尝试让我的 Rails 5 应用发推文。在推文中,我想 post url 到新插件。所以在我的控制器中我添加了以下内容:
class PluginsController < ApplicationController
include Rails.application.routes.url_helpers
def create
@plugin = current_user.plugins.build(plugin_params)
$client.update("#{url_for(@plugin)}")
end
end
我用 client.update
发送推文。我 运行 的事情是 url_for(@plugin)
没有为新插件生成准确的 link。它在我的推文中输出 http://localhost:3000/plugins
应该输出 http://localhost:3000/plugins/does-this-work
.
当我在 Rails 控制台中尝试相同时,它确实输出了正确的 link。
2.5.7 :009 > include Rails.application.routes.url_helpers
=> Object
2.5.7 :010 > url_for(@plugin)
=> "http://localhost:3000/plugins/does-this-work"
为什么我的控制器和控制台的输出不一样?
看起来,在您的控制器中,您还没有真正保存插件。这意味着它没有 ID,因此 rails 无法完全生成 url。
build
使用参数创建一个新的插件对象,但不保存它。您需要添加 @plugin.save
或 @plugin.save!
来保存它,或者您可以使用 current_user.plugins.create(plugin_params)
.
我希望您在控制台中以不同方式创建或获取插件,这就是您看到不同行为的原因。
可以说,在那个时候给你一个错误会更有帮助,但从技术上讲,是 url,你会 POST 一个新插件我认为这也是它表现如此的原因。
每当使用 sferik/twitter gem 创建新插件时,我都会尝试让我的 Rails 5 应用发推文。在推文中,我想 post url 到新插件。所以在我的控制器中我添加了以下内容:
class PluginsController < ApplicationController
include Rails.application.routes.url_helpers
def create
@plugin = current_user.plugins.build(plugin_params)
$client.update("#{url_for(@plugin)}")
end
end
我用 client.update
发送推文。我 运行 的事情是 url_for(@plugin)
没有为新插件生成准确的 link。它在我的推文中输出 http://localhost:3000/plugins
应该输出 http://localhost:3000/plugins/does-this-work
.
当我在 Rails 控制台中尝试相同时,它确实输出了正确的 link。
2.5.7 :009 > include Rails.application.routes.url_helpers
=> Object
2.5.7 :010 > url_for(@plugin)
=> "http://localhost:3000/plugins/does-this-work"
为什么我的控制器和控制台的输出不一样?
看起来,在您的控制器中,您还没有真正保存插件。这意味着它没有 ID,因此 rails 无法完全生成 url。
build
使用参数创建一个新的插件对象,但不保存它。您需要添加 @plugin.save
或 @plugin.save!
来保存它,或者您可以使用 current_user.plugins.create(plugin_params)
.
我希望您在控制台中以不同方式创建或获取插件,这就是您看到不同行为的原因。
可以说,在那个时候给你一个错误会更有帮助,但从技术上讲,是 url,你会 POST 一个新插件我认为这也是它表现如此的原因。