Ruby on rails 4 RubyonRails:如何更改路由地址

Ruby on rails 4 RubyonRails:如何更改路由地址,ruby-on-rails-4,ruby-on-rails-3.2,routes,custom-routes,Ruby On Rails 4,Ruby On Rails 3.2,Routes,Custom Routes,我是rails的新手,我想知道是否有办法更改路线的名称。我马上解释这个句子。我有一个名为users\u controller的控制器,下面是我控制器中的代码: def create if @user.save redirect_to @user end 我的routes.rb文件如下: resources :users get '/users/:id', to: 'users#show' 现在假设我有一个表单,并且我正确地填写了它,那么我将被重定向到localhost:3000/u

我是rails的新手,我想知道是否有办法更改路线的名称。我马上解释这个句子。我有一个名为users\u controller控制器,下面是我控制器中的代码:

def create
  if @user.save
  redirect_to @user
end
我的routes.rb文件如下:

resources :users

get '/users/:id', to: 'users#show'
现在假设我有一个表单,并且我正确地填写了它,那么我将被重定向到
localhost:3000/users/id(id=some value)
,我会这样做。现在我希望这个URL类似于
localhost:3000/registered
。当我单击submit按钮时,如果一切正常,我希望看到URL为
localhost:3000/注册的
,它将带我进入我的show action,或者与
localhost:3000/用户/id(id=some value)
一样工作。我不希望ID可见

为此,我尝试了
get'register',to:'users#show'
,但仍然看到与
localhost:3000/users/id(id=some value)相同的URL
。请告诉我怎么做

rails g controller registered index
这是我的
表演动作

def show

@user = User.find(params[:id])

end

我尝试了另一种方法,在同一个控制器中执行另一个操作。我在我的用户\u控制器中执行了索引操作,然后执行了无方法错误

您需要在用户控制器的
创建
更新
操作中将
重定向到

class UsersController < ApplicationController
  def create
     # get user from params
    if @user.save
      redirect_to registered_path
    else
      render :new
    end
  end

  def update
     # get user from params
    if @user.save
      redirect_to registered_path
    else
      render :edit
    end
  end
end

只需将您的路由用作:

match "/registered", :to => "users#show", :as => :user_registered, via: :get
要使用此路径,您将使用

redirect_to user_registered_path(id: user_id) 

在您的方法中。

最后,从我的讨论中可以清楚地看到,无法隐藏您的ID,但我们可以更改它们在浏览器上的显示方式。一种建议的方法是为ID创建一个散列,并使用它在显示操作中显示项目,或者另一种方法是将操作重定向到某个静态页面

这本书很好,我提到过。从那里我得到了一个“注册”的想法,到:'users#show'我应该将我的控制器更改为其他控制器,而不是使用@usersomething像redirect#u to registered#u path这样的命令。然后,它会给我一个错误,您正在查找的页面在Heroku上运行时不存在。它说没有IDI就找不到用户。我认为这与我的show action有关。我看到了问题。问题在于,您正在将
注册的
映射到
“用户#显示”
,这需要用户的id。您是要为所有用户创建一个boiler plate注册页面,还是希望为每个用户创建一个唯一的注册页面?我希望所有用户在登录时都能看到同一个显示页面,其中只包含他们的姓名。你可以假设它是某个网站的一个感谢页面,但它怎么知道这是一个GET或POST对不起,我的不好!在末尾添加:via:method-being-get或post让我这样检查fot.:)找不到没有ID的用户,它会说:(但是当我这样做时,
match'users/:ID',to:'users#show',:constraints=>{:ID=>/[a-Z]+/},via::get
它不起作用