Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中定制资源的URL_Ruby On Rails_Ruby_Ruby On Rails 4_Inheritance_Routing - Fatal编程技术网

Ruby on rails 在RubyonRails中定制资源的URL

Ruby on rails 在RubyonRails中定制资源的URL,ruby-on-rails,ruby,ruby-on-rails-4,inheritance,routing,Ruby On Rails,Ruby,Ruby On Rails 4,Inheritance,Routing,我有一个应用程序,它有以下三种模型:Doctor、Patient和继承自User模型的Admin。这三个模型都有自己的视图和控制器,但登录形式相同。下面是用户登录的方法 // session_controller.rb def create user = User.find_by(email: params[:session][:email]) if user && user.authenticate(params[:session][:pas

我有一个应用程序,它有以下三种模型:
Doctor
Patient
和继承自
User
模型的
Admin
。这三个模型都有自己的视图和控制器,但登录形式相同。下面是用户登录的方法

    // session_controller.rb
      def create
    user = User.find_by(email: params[:session][:email])
    if user && user.authenticate(params[:session][:password])
        redirect_to user
    else
        flash.now[:danger] = 'Invalid e-mail/password combination'
        render 'new'
    end
  end
和重定向到特定于型号视图的调用的路由

# routes.rb

resources :patients, :doctors, :admins

在这里之前,一切都很好,我被重定向到URI,例如/patients/1/doctors/2。但是,我不希望在URL中看到用户ID。如何将其更改为自定义设置,例如/:username/

您需要覆盖模型中的to_params方法

检查这一页

你可以这样做

def to_param
   id + "-" + username
end
如果从to_param方法中删除id,则必须更新获取用户/医生/etc的方式

例如,如果在to_param方法中只有用户名,则必须使用

User.find_by_username(params[:id])

您需要在模型中重写to_params方法

检查这一页

你可以这样做

def to_param
   id + "-" + username
end
如果从to_param方法中删除id,则必须更新获取用户/医生/etc的方式

例如,如果在to_param方法中只有用户名,则必须使用

User.find_by_username(params[:id])

您需要在模型中重写to_params方法

检查这一页

你可以这样做

def to_param
   id + "-" + username
end
如果从to_param方法中删除id,则必须更新获取用户/医生/etc的方式

例如,如果在to_param方法中只有用户名,则必须使用

User.find_by_username(params[:id])

您需要在模型中重写to_params方法

检查这一页

你可以这样做

def to_param
   id + "-" + username
end
如果从to_param方法中删除id,则必须更新获取用户/医生/etc的方式

例如,如果在to_param方法中只有用户名,则必须使用

User.find_by_username(params[:id])

实现这一目标的方法很少:

  • 假设您使用一些辅助方法,如current_user,您可以创建指向profile_controller#show的路由/配置文件。无论您是谁(医生、患者、管理员),您都已登录,并且您的“资源”ID在url中不可见。 编辑:如果您不确定如何正确地向RoR应用程序添加身份验证,请查看“warden”gem(或更复杂的“Desive”,它的引擎盖下有warden)
  • 您可以使用“友好”URL,在大多数情况下使用“1-username”等URL。您当然可以删除ID部分(1-xx),但您仍然必须提供唯一标识符(它可以是资源的uuid、名称/电子邮件与某些字段的唯一组合等)。有关友好URL的更多信息,请参见此处:

    • 实现这一目标的方法很少:

      • 假设您使用一些辅助方法,如current_user,您可以创建指向profile_controller#show的路由/配置文件。无论您是谁(医生、患者、管理员),您都已登录,并且您的“资源”ID在url中不可见。 编辑:如果您不确定如何正确地向RoR应用程序添加身份验证,请查看“warden”gem(或更复杂的“Desive”,它的引擎盖下有warden)
      • 您可以使用“友好”URL,在大多数情况下使用“1-username”等URL。您当然可以删除ID部分(1-xx),但您仍然必须提供唯一标识符(它可以是资源的uuid、名称/电子邮件与某些字段的唯一组合等)。有关友好URL的更多信息,请参见此处:

        • 实现这一目标的方法很少:

          • 假设您使用一些辅助方法,如current_user,您可以创建指向profile_controller#show的路由/配置文件。无论您是谁(医生、患者、管理员),您都已登录,并且您的“资源”ID在url中不可见。 编辑:如果您不确定如何正确地向RoR应用程序添加身份验证,请查看“warden”gem(或更复杂的“Desive”,它的引擎盖下有warden)
          • 您可以使用“友好”URL,在大多数情况下使用“1-username”等URL。您当然可以删除ID部分(1-xx),但您仍然必须提供唯一标识符(它可以是资源的uuid、名称/电子邮件与某些字段的唯一组合等)。有关友好URL的更多信息,请参见此处:

            • 实现这一目标的方法很少:

              • 假设您使用一些辅助方法,如current_user,您可以创建指向profile_controller#show的路由/配置文件。无论您是谁(医生、患者、管理员),您都已登录,并且您的“资源”ID在url中不可见。 编辑:如果您不确定如何正确地向RoR应用程序添加身份验证,请查看“warden”gem(或更复杂的“Desive”,它的引擎盖下有warden)
              • 您可以使用“友好”URL,在大多数情况下使用“1-username”等URL。您当然可以删除ID部分(1-xx),但您仍然必须提供唯一标识符(它可以是资源的uuid、名称/电子邮件与某些字段的唯一组合等)。有关友好URL的更多信息,请参见此处:

              我对这一点还不熟悉,所以这听起来可能很可笑。我正在考虑从会话中获取ID,而不是直接从参数中获取ID。这不可能吗?哦,当然你也能做到。例如,如果你想看另一位医生的页面,你必须从某个地方获得身份证。我对这一点还不熟悉,所以这听起来可能很可笑。我正在考虑从会话中获取ID,而不是直接从参数中获取ID。这不可能吗?哦,当然你也能做到。例如,如果你想看另一位医生的页面,你必须从某个地方获得身份证。我对这一点还不熟悉,所以这听起来可能很可笑。我正在考虑从会话中获取ID,而不是直接从参数中获取ID。这不可能吗?哦,当然你也能做到。