我与omniauth/openid有点混乱.
在尝试进行身份验证时,我在日志中发现了这一点:
OpenID::FetchingError: Error fetching https://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username: undefined method `io' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
重要的是undefined method io' for nil:NilClass来自openid/fetchers.rb,在下面的代码片段中:
module Net
class HTTP
def post_connection_check(hostname)
check_common_name = true
cert = @socket.io.peer_cert
cert.extensions.each { |ext|
next if ext.oid != "subjectAltName"
ext.value.split(/,\s+/).each{ |general_name|
if /\ADNS:(.*)/ =~ general_name
check_common_name = false
...
Run Code Online (Sandbox Code Playgroud)
该错误是由@socket.io.peer_cert@socket未定义生成的.
你们有没有遇到过这个?不太确定原因是什么.
我正在运行的版本:
我正在构建一个应用程序,需要一个两步过程来为其中一个模型创建一个对象.
我考虑过......
创建自定义"新"操作的自定义路由
要么
对两个步骤使用相同的"新"操作,但基于参数渲染正确的视图
处理这个问题的最佳方法是什么?
我已经创建了一个名为gemset rails2ruby192,我.rvmrc在根文件目录中添加了以下代码,但它没有加载gemset.
ruby-1.9.2-p180@rails2ruby192
Run Code Online (Sandbox Code Playgroud) 有没有办法将地图和(莲花)路由器命名空间一起使用?下面是config.ru我试图作为演示运行的示例.
require 'bundler'
Bundler.require
module Demo
class Application
def initialize
@app = Rack::Builder.new do
map '/this_works' do
run Proc.new {|env| [200, {"Content-Type" => "text/html"}, ["this_works"]]}
end
map '/api' do
run Lotus::Router.new do
get '/api/', to: ->(env) { [200, {}, ['Welcome to Lotus::Router!']] }
get '/*', to: ->(env) { [200, {}, ["This is catch all: #{ env['router.params'].inspect }!"]] }
end
end
end
end
def call(env)
@app.call(env)
end
end
end
run Demo::Application.new
Run Code Online (Sandbox Code Playgroud) 据我所知,Rails 4 不支持match关键字。
但我想创建一个默认的通用路由,如下所示
match ':controller(/:action(/:id))(.:format)', :via => :get
Run Code Online (Sandbox Code Playgroud)
当我在routes.rb中使用上面的代码时,它会抛出以下错误:
Missing :action key on routes definition, please check your routes
Run Code Online (Sandbox Code Playgroud)
有人可以帮我如何在 Rails 4 中实现这一点吗?
脚手架生成的 RSpec 控制器规范中的一项测试失败了,在我看来,它似乎总是设计失败,但当然它肯定会成功。
我开发了一个 Rails 4 应用程序,其 RSpec 规范由rails g scaffold.
我的控制器规范SkillsController要求我为我的模型填写“有效属性”散列和“无效属性”散列,我这样做了。
除了“使用无效参数的 PUT 更新重新渲染‘编辑’模板”外,所有测试均成功:
1) SkillsController PUT update with invalid params re-renders the 'edit' template
Failure/Error: expect(response).to render_template("edit")
expecting <"edit"> but rendering with <[]>
# ./spec/controllers/skills_controller_spec.rb:139:in `block (4 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
在 Rails 控制台中,我确认我的invalid_params哈希包含无效参数 ( { hack: 'hack' })。
控制器调用skill_params返回空散列的方法,因为我的invalid_params散列仅包含无效参数。
skill.update(skill_params)使用空skill_params散列调用返回 true,因此该else部分将永远不会执行,并且不会呈现“新”模板:
def update
respond_to …Run Code Online (Sandbox Code Playgroud) 我有一个ActiveRecord模型对象@gallery,它表示Galleries MYSQL表中的一行.有没有办法让我向@gallery表格中的下一个画廊对象提供id?
对我来说,显而易见的方法是:
@galleries = Gallery.find(:all)
index = @galleries.index(@gallery)
@nextgallery = @galleries[index+1]
Run Code Online (Sandbox Code Playgroud)
但后来我必须nilsafe这个,我不必要另一个DB调用来获取所有记录.还有其他出路吗?
我经常发现自己这样做:
!(val).nil?
Run Code Online (Sandbox Code Playgroud)
如果有类似的方法,我的代码会更漂亮
val.exists?
Run Code Online (Sandbox Code Playgroud)
有类似的东西吗?
我尝试启动脚本/服务器时出现此错误:
/opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems.rb:827:in `report_activate_error': RubyGem version error: rack(1.0.0 not ~> 1.0.1) (Gem::LoadError)
from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems.rb:261:in `activate'
from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems.rb:68:in `gem'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller.rb:34
from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:521:in `new_constants_in'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
from /opt/ruby1.8/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/server.rb:2
from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from script/server:3
Run Code Online (Sandbox Code Playgroud)
这很烦人,因为我做了:
Successfully installed rack-1.1.0
1 gem installed
Installing ri documentation for rack-1.1.0...
Installing RDoc documentation for rack-1.1.0...
Run Code Online (Sandbox Code Playgroud)
但它总是说错误.我有Rails 2.3.5,但我不认为错误是Rails相关,但更像是我的服务器相关的大声笑.
感谢帮助!
我得到了一个失败的测试,我调试很困难.
我的测试用例是:
it "routes to #active" do
get ("/parties/active").should route_to("parties#active")
end
Run Code Online (Sandbox Code Playgroud)
我的路线是:
resources :parties do
get 'active', :on => :collection
end
Run Code Online (Sandbox Code Playgroud)
当我运行测试用例时,我收到以下错误:
NoMethodError: undefined method `values' for "/parties/active":String
Run Code Online (Sandbox Code Playgroud)
完整错误输出:https://gist.github.com/1748264
当我运行rake路线时,我看到:
active_parties GET /parties/active(.:format) parties#active
parties GET /parties(.:format) parties#index
POST /parties(.:format) parties#create
new_party GET /parties/new(.:format) parties#new
edit_party GET /parties/:id/edit(.:format) parties#edit
party GET /parties/:id(.:format) parties#show
PUT /parties/:id(.:format) parties#update
DELETE /parties/:id(.:format) parties#destroy
root / parties#show
Run Code Online (Sandbox Code Playgroud)
我正在运行的测试几乎与脚手架生成的测试相同:
it "routes to #new" do
get("/parties/new").should route_to("parties#new")
end
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
ruby ×5
activerecord ×1
gem ×1
hanami ×1
net-http ×1
omniauth ×1
rack ×1
rspec ×1
rspec-rails ×1
ruby-openid ×1
rvm ×1
rvmrc ×1