我目前正在尝试处理RoR.我将两个字符串传递给我的控制器.一个是随机十六进制字符串,另一个是电子邮件.该项目用于对数据库进行简单的电子邮件验证.我遇到的问题是当我输入类似下面的内容来测试我的页面时:
http://signup.testsite.local/confirm/da2fdbb49cf32c6848b0aba0f80fb78c/bob.villa@gmailcom
Run Code Online (Sandbox Code Playgroud)
所有我在我的params hash中得到的:email是'bob'.我离开了.中间gmail和com外面因为这会导致比赛根本不起作用.
我的路由匹配如下:
match "confirm/:code/:email" => "confirm#index"
Run Code Online (Sandbox Code Playgroud)
这看起来很简单,我需要的东西.我很难弄清楚这笔交易是什么,甚至是如何找到答案.任何帮助或指导将不胜感激.
在我的rails(2.x)应用程序中.我想在我的视图中使用自定义字体.所以我在fonts文件夹下的public中添加了字体文件.当我尝试在url中或通过应用程序获取字体时,它会通过路由错误.我猜rails路由无法识别格式/文件.如果我错了,请纠正我并给我解决方案
css代码:
@font-face {
font-family: 'Effra';
src: url('/fonts/effra_std_rg-webfont.eot');
src: url('/fonts/effra_std_rg-webfont.eot?#iefix') format('embedded-opentype'),
url('/fonts/effra_std_rg-webfont.woff') format('woff'),
url('/fonts/effra_std_rg-webfont.ttf') format('truetype'),
url('/fonts/effra_std_rg-webfont.svg#EffraRegular') format('svg');
font-weight: normal;
font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)
注意:我可以通过直接键入路径而不是eot文件来获取woff,ttf文件.
Error trace:
Unknown action
No action responded to fonts. Actions: XXXXXXsomeactionsXXXXX and rescue_404
Run Code Online (Sandbox Code Playgroud)
先谢谢,阿伦.
我正在研究的Rails应用程序中有许多不同的模型.我见过许多网站都使用了应用程序范围的slug路由方法.这是什么意思?
http://example.com/nick-oneill <-- This points to a User object
http://example.com/facebook <-- This points to a Company object
http://example.com/developers <-- This points to the users#index page
Run Code Online (Sandbox Code Playgroud)
我知道to_param并在应用程序中创建了读者友好的slug,但是我不知道有一种方法可以为各种对象提供根级别的slug.你可以认为这类似于Facebook的Graph API:有不同的对象类型,但它们都存在于https://graph.facebook.com/object-id
任何见解都将非常感谢!
这是常见命名空间的样子.
namespace :admin do
resources :posts
end
Run Code Online (Sandbox Code Playgroud)
它创建了一个像这样的命名路线;
new_admin_post_path
Run Code Online (Sandbox Code Playgroud)
这是我的问题; 如何在命名空间下的命名路由中添加前缀(如本例中的"new")?
让我们说我的路线定义喜欢这个;
namespace :admin do
get 'post/new' => 'posts#new', as: 'post'
end
Run Code Online (Sandbox Code Playgroud)
它创造了一条命名路线,如;
admin_post_path
Run Code Online (Sandbox Code Playgroud)
我想为这个命名的路由添加"new"前缀并使其看起来像new_admin_post_path我不想使用resources.
在我的Rails 3.2应用程序中,我正在尝试使用config.exceptions_app通过路由表路由异常以呈现特定于错误的页面(尤其是401 Forbidden页面).这是我到目前为止配置的内容:
# application.rb
config.action_dispatch.rescue_responses.merge!('Error::Forbidden' => :forbidden)
config.exceptions_app = ->(env) { ErrorsController.action(:show).call(env) }
# development.rb
config.consider_all_requests_local = false
# test.rb
config.consider_all_requests_local = false
Run Code Online (Sandbox Code Playgroud)
现在问题的关键是:
module Error
class Forbidden < StandardError
end
end
class ErrorsController < ApplicationController
layout 'error'
def show
exception = env['action_dispatch.exception']
status_code = ActionDispatch::ExceptionWrapper.new(env, exception).status_code
rescue_response = ActionDispatch::ExceptionWrapper.rescue_responses[exception.class.name]
render :action => rescue_response, :status => status_code, :formats => [:html]
end
def forbidden
render :status => :forbidden, :formats => [:html]
end
end
Run Code Online (Sandbox Code Playgroud)
当我想渲染401响应时,我只是raise Error::Forbidden在开发环境中完美地工作.但是在rspec中运行示例时,例如:
it 'should return …Run Code Online (Sandbox Code Playgroud) 我有一个莫名其妙的困难时间让我的命名路线在我的rspec测试中工作.
这就是我所看到的:
1) Home GET / works!
Failure/Error: get root_path
NameError:
undefined local variable or method `root_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fe13b0c1538>
# ./spec/requests/home_spec.rb:6:in `block (3 levels) in <top (required)>'
2) Home GET / shows products!
Failure/Error: get products_path
NameError:
undefined local variable or method `products_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fe13b0cdea0>
# ./spec/requests/home_spec.rb:10:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
require 'spec_helper'
describe "Home" do
describe "GET /" do
it "works!" do
get root_path
response.status.should be(200)
end
it "shows products!" do
get products_path
response.status.should be(200) …Run Code Online (Sandbox Code Playgroud) 在讨论使用动态段的路由时,Ruby on Rails指南(v4.0.1)说" 你不能使用:namespace或:module with:controller path segment. "他们继续建议:" 如果你需要这样做然后使用约束:控制器匹配您需要的命名空间."
我在很多命名空间下有很多控制器.如果我可以在我的情况下使动态段工作,那么我可以使用routes.rb中的一行处理所有路由.也许是这样的:
get '/:namespace/:controller/:action' #note: this isn't valid
Run Code Online (Sandbox Code Playgroud)
但这不起作用(见上文).我宁愿保留名称空间,所以我可以在我的routes.rb文件中为每个名称空间写出一个新行,然后添加一个约束来检查URL是否要求该名称空间.这不会是世界末日.它看起来非常干燥和耻辱,因为所有的路由信息都巧妙地呈现在URL中.
我只是想知道是否有任何偷偷摸摸的方式似乎(对我来说)像动态段路由的功能有点差距.是否可以让路由DSL运行一个块(与Constraints不同)执行比路由匹配的布尔值yes/no更复杂的块?或许我遗漏了标准Rails路由功能的工作方式.任何建议赞赏.
更新:只是拼出一点点.我对Rails指南的理解是,我需要有这样的行:
post ':controller/:action' , controller: /user_details\/[^\/]+/
post ':controller/:action' , controller: /preferences\/[^\/]+/
Run Code Online (Sandbox Code Playgroud)
...等等.如果我想要20个名称空间,那么我将需要20个这样的行.我只是想知道是否有一种更简洁的方式接近上面给出的我的1线理想.
路由的代码如下:
resources :orders, only: [:create], defaults: { format: 'json' }
resources :users, only: [:create, :update], defaults: { format: 'json' }
resources :delivery_types, only: [:index], defaults: { format: 'json' }
resources :time_corrections, only: [:index], defaults: { format: 'json' }
Run Code Online (Sandbox Code Playgroud)
可以使用1个字符串为所有资源设置默认格式,每行不带"defaults"哈希值?谢谢.
我有一个Rails 4应用程序,其中所有控制器和视图分为两个名称空间,面向代理和面向backend客户frontend:
MyApp::Application.routes.draw do
constraints subdomain: "admin" do
namespace :backend do
resources :events
end
end
constraints subdomain: /.+/ do
namespace :frontend do
resources :events
end
end
end
Run Code Online (Sandbox Code Playgroud)
此外,所有控制器都继承自BackendController或 FrontendController:
controllers
??? application_controller.rb
??? backend
? ??? events_controller.rb
??? backend_controller.rb
??? frontend
? ??? events_controller.rb
??? frontend_controller.rb
Run Code Online (Sandbox Code Playgroud)
现在,需要生成路径的所有内容都必须以命名空间为前缀,例如respond_with [:backend, @event]或form_for [:backend, @event].
有没有办法为每个控制器的URL助手设置默认命名空间,以便respond_with @event从继承自BackendController的控制器调用自动假定正确的命名空间?
我正在开发一个包含API使用grapegem 的应用程序.
这是我的Root班级:
module API
class Root < Grape::API
rescue_from :all do |e|
Rack::Response.new(
[ "Error: #{e.message}" ],
500,
{ "Content-type" => "text/error" }
).finish
end
prefix "api"
version 'v1', using: :path
format :json
error_format :json
mount ::API::ServiceRequests
end
end
Run Code Online (Sandbox Code Playgroud)
以下是我如何在路线中安装它:
mount API::Root => '/'
我收到的错误是:
routes.rb:45:in阻止':未初始化的常量API(NameError)`
文件结构相似app/api/root.rb,我在我application.rb的文件中加载了这些代码:
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
Run Code Online (Sandbox Code Playgroud) rails-routing ×10
ruby ×2
query-string ×1
routes ×1
routing ×1
rspec ×1
rspec2 ×1
ruby-grape ×1
url-routing ×1