我已经阅读了很多关于Omniauth和OAuth2的内容,以及Omniauth如何使用OAuth,但我并不了解每个内容的目标是什么.
例如,我知道有了Omniauth,我可以回复发送params
@auth [ 'omniauth.params']
但如果我使用OAuth,没有Omniauth,我可以这样做吗?
我真正的问题是我不明白它们之间的区别,Omniauth的结束和OAuth的开始,以及我可以用Omuth来做什么,这是OAuth无法实现的.
我想创建一个新的Rails应用程序.我正在使用rvm和ruby-2.1.2.我是@global宝石集团,并计划使用bundler来管理gem依赖项.但是,gem install rails失败了:
$ gem install rails
Fetching: concurrent-ruby-1.0.3.pre3.gem (100%)
Successfully installed concurrent-ruby-1.0.3.pre3
Fetching: minitest-5.9.0.gem (100%)
Successfully installed minitest-5.9.0
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: activesupport-5.0.0.gem (100%)
ERROR: Error installing rails:
activesupport requires Ruby version >= 2.2.2.
Run Code Online (Sandbox Code Playgroud)
是的,我确实使用ruby-2.1.2而不是ruby-2.2.2,但我不应该继续使用ruby-2.1.2吗?我们不允许再使用ruby-2.1.2吗?
我想也许ActiveBupport 5已经安装在@globalgemset中,ActiveSupport 5需要2.2.2,但实际上@globalgemset中没有ActiveSupport 5 :
$ rvm gemdir
/Users/myuser/.rvm/gems/ruby-2.1.2@global
$ cd /Users/myuser/.rvm/gems/ruby-2.1.2@global
$ cd gems
$ ls
bundler-unload-1.0.2 gem-wrappers-1.2.4 rake-10.1.0 rvm-1.11.3.9 …Run Code Online (Sandbox Code Playgroud) 鉴于我有这个哈希:
h = { a: 'a', b: 'b', c: { d: 'd', e: 'e'} }
Run Code Online (Sandbox Code Playgroud)
我转换为OpenStruct:
o = OpenStruct.new(h)
=> #<OpenStruct a="a", b="b", c={:d=>"d", :e=>"e"}>
o.a
=> "a"
o.b
=> "b"
o.c
=> {:d=>"d", :e=>"e"}
2.1.2 :006 > o.c.d
NoMethodError: undefined method `d' for {:d=>"d", :e=>"e"}:Hash
Run Code Online (Sandbox Code Playgroud)
我希望所有嵌套键都是方法.所以我可以这样访问d:
o.c.d
=> "d"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我只是想从表中删除一个外键列。我在迁移中有这个:
def change
remove_column :addresses, :contact_id
end
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
Mysql2::Error: 无法删除索引 'index_addresses_on_contact_id': 需要外键约束:ALTER TABLE
addressesDROPcontact_id
那么如何在 Rails 迁移中删除这个外键约束呢?
用户可以通过由控制器操作处理的 Web 界面在我的系统中上传多个文件。
def import
paths = params[:files].map(&:path) if params[:files].present?
if paths
@results = MyRecord.create_from paths
end
redirect_to confirmation_my_records_path
end
class MyRecord < ActiveRecord::Base
def self.create_from(paths)
paths.each do |path|
MyRecordWorker.perform path
end
end
end
works/my_record_worker.rb
class MyRecordWorker
include Sidekiq::Worker
def perform(path)
# each time this is run, it is no I/O, just expensive math calculations that take minutes
collection = ExpensiveOperation.new(path).run
if collection && collection.any?
save_records(collection)
else
[]
end
end
end
Run Code Online (Sandbox Code Playgroud)
因为 sidekiq 作业将在后台运行,我如何通过确认页面通知用户作业已完成?我们不知道作业何时完成,因此 Rails 请求和响应周期无法确定加载确认页面时的任何内容。确认页面是否应该只说“正在处理...”然后让 Faye 在工作完成后更新页面?
在 Google Chrome 上,当我使用 Chrome 控制台查看“网络”选项卡下的 HTTP 请求标头时,它为我提供了以下请求标头:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:ASP.NET_SessionId=nlbupfbt32jda1tziep4p21r; .ASPXAUTH=8C94786DD4A3C03C5548973E04A76FF554F38D6EB74E0B006AB3C3F72684E94DC0469E28D22E4BBFA069B82B1CCFB4203627D998990C6C96897DDBB0F611809175D5F06F015604082481F0079AE48DAB7974F3D63242055BEC75F707C545666C67B7C9D9E53F7531020235881E9DA4F3C26FD02B0ED0971D02C64DFE96F67C745119F44BBC9E46DC2CEF61D639EA01B9
... more headers ...
Run Code Online (Sandbox Code Playgroud)
我想要得到的是 Cookie 下的数据。我试过,document.cookie但它返回一个空字符串。如何获取该 cookie 信息?
我有以下正则表达式:
REGEX = /^.+(\d+.+(?=AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)[A-Z]{2}[, ]+\d{5}(?:-\d{4})?).+/
Run Code Online (Sandbox Code Playgroud)
我有以下字符串:
str = "fdsfd 8126 E Bowen AVE Bensalem, PA 19020-1642 dfdf"
Run Code Online (Sandbox Code Playgroud)
请注意,我的捕获组以与模式匹配的一个或多个数字开头.然而,这就是我得到的:
str =~ REGEX
$1
=> "6 E Bowen AVE Bensalem, PA 19020-1642"
Run Code Online (Sandbox Code Playgroud)
要么
match = str.match(REGEX)
match[1]
=> "6 E Bowen AVE Bensalem, PA 19020-1642"
Run Code Online (Sandbox Code Playgroud)
为什么它缺少812的前三位数?
我想知道为什么尝试将此数组转换为哈希会导致错误:
[:a, [1,2,3]].to_h
=> TypeError: wrong element type Symbol at 0 (expected array)
Hash[ [:a, [1,2,3]] ]
=> ArgumentError: invalid number of elements (3 for 1..2)
Run Code Online (Sandbox Code Playgroud)
该数组散列两个项目。所以它应该很容易转换为键/值对,这就是哈希。
我有一个看起来像这样的集合:
[ [:a, [1,2,3]], [:b, [4,5,6]] ]
Run Code Online (Sandbox Code Playgroud)
我只想让它成为一个哈希数组:
[ [:a, [1,2,3]], [:b, [4,5,6]] ].collect {|collection| Hash[collection] }
=> ArgumentError: invalid number of elements (3 for 1..2)
Run Code Online (Sandbox Code Playgroud)
为什么不能将两个项目的数组转换为键/值对?
我可以做这样的事情:
arr.collect {|item| { item[0] => item[1] } }
=> [{:a=>[1, 2, 3]}, {:b=>[4, 5, 6]}]
Run Code Online (Sandbox Code Playgroud) 我有一个简单的引导模式,当用户单击链接时,它会显示一个带有下拉菜单和提交按钮的表单。我尝试在 Rspec 功能测试中使用 Capybara 从下拉菜单中选择选项,但它找不到下拉菜单。
功能规格:
scenario "User searches records" do
visit my_records_path
click_link 'Search Records'
within('#practiceSearchModal') do
select('Pennsylvania', from: '#state_search')
click_on('Submit')
end
end
Run Code Online (Sandbox Code Playgroud)
页面上的模态:
<div class="modal fade in" id="practiceSearchModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false" style="display: block;"><div class="modal-backdrop fade in" style="height: 654px;"></div>
<div class="modal-dialog" style="width: 750px;">
<div class="modal-content">
<select name="state" id="state_search" class="form-control">
<option value="">Select</option>
<option value="Pennsylvania">Pennsylvania</option>
<option value="New York">New York</option>
</select>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我在 Capybara 中遇到的错误,它找不到 ID 为 state_search 的选择菜单:
Capybara::ElementNotFound:
Unable to find visible select box "#state_search" that is …Run Code Online (Sandbox Code Playgroud) Rails附带了Fragment Caching和Low-Level Caching.片段缓存的工作方式非常清楚:
Rails将使用唯一键编写新的缓存条目.如果updated_at的值已更改,则将生成新密钥.然后Rails会为该密钥写一个新的缓存,并且永远不会再次使用写入旧密钥的旧缓存.这称为基于密钥的过期.当视图片段改变时(例如,视图中的HTML改变),高速缓存片段也将过期.像Memcached这样的缓存存储将自动删除旧的缓存文件.
<% @products.each do |product| %>
<% cache product do %>
<%= render product %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
因此,视图将被缓存,当与视图关联的ActiveRecord对象的updated_at发生更改或html发生更改时,将创建新缓存.可以理解的.
我不想缓存视图.我想缓存从ActiveRecord查询构建的Hash集合.我知道Rails有SQL缓存,它在一个请求中使用时缓存同一个查询的结果.但是我需要在多个请求中提供结果,并且只有在对象之一更新update_at或将新对象添加到Hash集合时才会更新.
低级缓存缓存特定值或查询结果,而不是缓存视图片段.
def get_events
@events = Event.search(params)
time = Benchmark.measure {
event_data = Rails.cache.fetch 'event_data' do
# A TON OF EVENTS TO LOAD ON CALENDAR
@events.collect do |event|
{
title: event.title,
description: event.description || '',
start: event.starttime.iso8601,
end: event.endtime.iso8601,
allDay: event.all_day,
recurring: (event.event_series_id) ? true : false,
backgroundColor: (event.event_category.color || "red"),
borderColor: (event.event_category.color || "red") …Run Code Online (Sandbox Code Playgroud)