【问题标题】:Rails: match the url to base urlRails:将 url 与基本 url 匹配
【发布时间】:2013-05-05 15:12:49
【问题描述】:

我有一个简单的快速问题。我有一个网址:

  http://www.mealnut.com/foodios/cakerystore

需要把它做成

  http://www.mealnut.com/cakerystore 

谁能告诉我怎么做?我是新来的轨道。

【问题讨论】:

  • 这个问题需要更多细节。 foodios 是控制器吗? cakerystore 是一个动作吗?是否有带有任何控制器的模型?
  • @GrantBirchmeier 是的,它是 foodios 控制器。 cakerystore 是用户名。而且没有带控制器的模型。
  • 哦,哇。这可能是一个艰难的过程。这是否意味着您要对 每个 用户名执行此操作?
  • 好吧,我想我明白了。

标签: ruby-on-rails-3.2


【解决方案1】:

您的问题仍然很不清楚,但我认为您需要在您的 routes.rb 中设置一个包罗万象的规则:

get "*username" => "foodios#user_action"

这将允许您为每个用户拥有根 u​​rl,这是我认为您真正要求的:

  • http://www.mealnut.com/cakerystore
  • http://www.mealnut.com/bakeland
  • http://www.mealnut.com/cookieworld

这应该是您的 routes.rb 文件中定义的最后一个路由。这是因为该路由将匹配 所有未被其他路由匹配的 URL在文件前面定义。 (Rails 尝试按照定义的顺序匹配路由。)

此路由将 url 定向到 FoodiosController::user_action 操作(例如方法)。 (当然,你可以重命名user_action。)

这个动作的定义如下:

# In FoodiosController

def user_action
  # params[:username] comes from '*username' in the route
  @user = User::find_by_username(params[:username])

  unless @user.nil?
    # not sure what you want to show, but this would do user#show 
    render @user
    # or you can render some other path
  else
    # redirect to some error page
  end
end

因为这条路由捕获了所有的东西,否则那里的情况将需要做一些适合的事情,不仅是无效的用户名,还有你可能得到的任何类型的错误 URL。现在都被这个动作控制了。

对于它的价值,我认为你最好不要这样做。听起来你应该有一个 UsersController,你的 URL 应该是http://www.mealnut.com/users/cakerystore。这会容易得多。

学分/延伸阅读:

【讨论】:

    【解决方案2】:

    我怀疑这是否是您问题的答案。但这是您问题的答案。

    'http://www.mealnut.com/foodios/cakerystore'.gsub(/\/foodios/,'')
    

    【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签