Ruby on rails url_for在控制台和控制器中提供不同的输出-Rails 5

Ruby on rails url_for在控制台和控制器中提供不同的输出-Rails 5,ruby-on-rails,url,rails-console,url-for,Ruby On Rails,Url,Rails Console,Url For,我正试图让我的Rails 5应用程序在使用创建新插件时发出tweet。在tweet中,我想发布新插件的url。因此,我在控制器中添加了以下内容: class PluginsController < ApplicationController include Rails.application.routes.url_helpers def create @plugin = current_user.plugins.build(plugin_params) $cli

我正试图让我的Rails 5应用程序在使用创建新插件时发出tweet。在tweet中,我想发布新插件的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

为什么我的控制器和控制台中的输出不一样?

看起来,在您的控制器中,您实际上还没有保存插件。这意味着它没有id,因此rails无法完全生成url

build
使用参数创建一个新的插件对象,但不保存它。您需要添加
@plugin.save
@plugin.save
保存它,或者您可以使用
当前用户.plugins.create(plugin\u参数)

我希望在您的控制台中,您创建或获取插件的方式有所不同,这就是为什么您会看到不同的行为


可以说,在这一点上给你一个错误会更有帮助,但从技术上讲,你也会发布一个新插件,这就是为什么它会这样做。

嗨,我把它改为
current_user.plugins.create(plugin_params)
,它成功了,非常感谢!
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"