【问题标题】:Why is url helper in rails putting a "." instead of a "/" in path?为什么rails中的url助手放一个“。”而不是路径中的“/”?
【发布时间】:2012-04-23 07:31:05
【问题描述】:

在我的应用中,我正在努力让用户发送邀请。邀请有令牌。在电子邮件中,我使用路径中的令牌链接到注册页面。在我正在使用的邮件控制器中:

new_user_registration_url(@invitation.token)

正如我在 railscast 中看到的 Ryan Bates 所做的那样。但它似乎正在输出这种格式:

http://localhost:3000/signup.4a4aebcde29738a39c7f447f58817e49cf9b4cf4

为什么会有“。”而不是“/”?

更新:

我正在使用设计,这里是相关路线。我对这些没有信心;我曾为此苦苦挣扎,但这些似乎奏效了:

  devise_scope :user do
    get '/signup/:invitation_token' => "registrations#new", :as => :new_user_registration
  end
  devise_for :users, :controllers => { :registrations => "registrations"}, :skip => [:registrations]
  as :user do
    get '/users/cancel' => 'devise/registrations#cancel', :as => :cancel_user_registration
    post '/users' => 'devise/registrations#create', :as => :user_registration
    get '/signup' => 'registrations#new', :as => :new_user_registration
    get '/users/edit' => 'devise/registrations#edit', :as => :edit_user_registration
    put '/users' => 'devise/registrations#update'
    delete '/users' => 'devise/registrations#destroy'
  end

【问题讨论】:

  • 向我们展示您的routes.rb 以准确说明。

标签: ruby-on-rails urlhelper


【解决方案1】:

没有routes.rb 很难说,但似乎作者有类似的东西:

#in routes.rb
get 'signup' => 'controller#action', as: :new_user_registration

但必须有:

get 'signup/:token' => 'controller#action', as: :new_user_registration

检查:

# in console
app.new_user_registration_path('ToKeN') # => "/signup/ToKeN"

【讨论】:

  • 查看更新。 .我实际上有两种类型的路线,也许这是我的问题?我同时使用这两种方法,以便获得常规注册和邀请注册。
  • 你有 2 个路径,命名为 :new_user_registration,看到了吗?评论第二个并重新启动您的应用程序(有时路由更改太棘手而无法即时实施)。告诉我们结果。
  • 当我这样做时,new_user_registration_url(@invitation.token) 的输出根据需要有一个“/”,但是我的 /signup 路由不起作用,更让我困惑的是,我的users/sign_in route (get "No route matches {:controller=>"registrations", :action=>"new""}。知道为什么吗?
  • 我的错,users/sign_in 路由没有损坏,但“link_to”Sign up,new_registration_path(resource_name)“生成的链接不再有效。我想让它工作,并且有一个常规的注册路径和一个用于邀请注册的路径。我应该如何使用设计来做到这一点?可能会提出新问题。
  • 很高兴听到您解决了冲突!对于未来:1)更改routes.rb(尤其是删除东西)通常需要重新启动您的应用程序以反映它们; 2) 如果快速查看routes.rb 文件没有帮助——使用rake routes 并将输出重定向到文本文件——您将了解所有路由和所有路径助手。
【解决方案2】:

如果您只是将字符串或符号作为参数传递给路径助手,我认为它会被解释为format。尝试以下方法:

new_user_registration_url(:token => @invitation.token)

new_user_registration_url + "/" + @invitation.token

【讨论】:

  • 如果我使用 :token => @invitation.token 结构,我会得到一个带有“?”的 url代替 ”。”这比我以前的地方好。 “被解释为格式”是什么意思?
  • @John 在 Rails 中使用标准的 RESTful 路由,你通常可以在末尾添加 .xyz 来告诉 Rails 你想要响应的格式。默认是 html,但你可以做一些事情像 GET /users.xmlGET /users.js 分别获取 XML 或 JavaScript 中的用户索引,只要您的控制器操作设置为响应格式。如果您运行rake routes,您可以看到这些选项为(:format)。因此,我认为当您将单个字符串或符号参数传递给路径助手时,它会将其解释为 format 参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多