小编Don*_*ato的帖子

OAuth2和Omniauth之间的区别

我已经阅读了很多关于Omniauth和OAuth2的内容,以及Omniauth如何使用OAuth,但我并不了解每个内容的目标是什么.

例如,我知道有了Omniauth,我可以回复发送params

@auth [ 'omniauth.params']

但如果我使用OAuth,没有Omniauth,我可以这样做吗?

我真正的问题是我不明白它们之间的区别,Omniauth的结束和OAuth的开始,以及我可以用Omuth来做什么,这是OAuth无法实现的.

ruby-on-rails oauth omniauth

18
推荐指数
1
解决办法
5021
查看次数

Rails安装失败:activesupport需要Ruby版本> = 2.2.2

我想创建一个新的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)

ruby ruby-on-rails

18
推荐指数
2
解决办法
4万
查看次数

递归地将Hash转换为OpenStruct

鉴于我有这个哈希:

 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)

我怎样才能做到这一点?

ruby

14
推荐指数
4
解决办法
7104
查看次数

使用 Rails 迁移删除外键列

我只是想从表中删除一个外键列。我在迁移中有这个:

def change
  remove_column :addresses, :contact_id
end  
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Mysql2::Error: 无法删除索引 'index_addresses_on_contact_id': 需要外键约束:ALTER TABLE addressesDROP contact_id

那么如何在 Rails 迁移中删除这个外键约束呢?

ruby-on-rails

7
推荐指数
1
解决办法
5690
查看次数

作业完成后,Sidekiq 如何在网页上通知用户?

用户可以通过由控制器操作处理的 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 在工作完成后更新页面?

ruby ruby-on-rails sidekiq

6
推荐指数
1
解决办法
1275
查看次数

从 HTTP 请求头中获取 cookie

在 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 信息?

javascript http

5
推荐指数
1
解决办法
2万
查看次数

为什么\ d +不匹配所有数字?

我有以下正则表达式:

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的前三位数?

ruby regex

5
推荐指数
1
解决办法
524
查看次数

Ruby:0 处的错误元素类型符号(预期数组)

我想知道为什么尝试将此数组转换为哈希会导致错误:

[: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)

ruby arrays

5
推荐指数
1
解决办法
4078
查看次数

Capybara::ElementNotFound:无法找到可见的选择框

我有一个简单的引导模式,当用户单击链接时,它会显示一个带有下拉菜单和提交按钮的表单。我尝试在 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)

ruby rspec ruby-on-rails capybara

5
推荐指数
1
解决办法
4957
查看次数

Rails低级缓存:当ActiveRecord对象updated_at更改或将新对象添加到集合时更新缓存

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)

ruby caching ruby-on-rails

4
推荐指数
1
解决办法
2644
查看次数

标签 统计

ruby ×7

ruby-on-rails ×6

arrays ×1

caching ×1

capybara ×1

http ×1

javascript ×1

oauth ×1

omniauth ×1

regex ×1

rspec ×1

sidekiq ×1