小编ard*_*vis的帖子

Zombie Level 5 Challenge 2的路轨 - 自定义路线

目标是创建一个自定义路由,以便/ undead将转到ZombiesController上的不死行为.

我的代码:

TwitterForZombies::Application.routes.draw do
    resources :zombies 
    match 'show_zombie' => "undead#show" 
end
Run Code Online (Sandbox Code Playgroud)

错误......"没有添加正确的路线,无法进入ZombiesController#不死族."

我不知道我哪里出错了....

routing ruby-on-rails

3
推荐指数
1
解决办法
3777
查看次数

扩展Devise的SessionsController

我正在尝试将一个before_destroy过滤器添加到Devise的SessionsController中.

这是我尝试过的:

我创建了一个包含before_destroy过滤器的模块和另一个模块,其中包含我希望它调用的方法.

module UserTracker

  prepend_before_filter :stop_tracking, :only => [:destroy]

  module TrackerStopper
    def stop_tracking
      # Do stuff
    end
  end

  include TrackerStopper
end
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用UserTracker模块扩展SessionsController.

Devise::SessionsController.extend UserTracker
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我的模块加载时没有加载设计.这导致以下错误:

uninitialized constant Devise::SessionsController (NameError)
Run Code Online (Sandbox Code Playgroud)

基本上,我想在每次会话被破坏时运行一个方法,而不会覆盖整个SessionsController,但我无法想出一种方法来混合它.

谢谢!

更新1:我放弃了构建一个单独的gem,这是我在我的应用程序中尝试的代码.

UserTrackersController.rb

class  UserTrackersController < Devise::SessionsController
  prepend_before_filter :stop_tracking, :only => [:destroy]

  def stop_tracking
    current_user.update_attributes(:current_sign_in_ip => nil)
  end
end
Run Code Online (Sandbox Code Playgroud)

的routes.rb

#--
# Devise
devise_for :users, :controllers => { :sessions => 'user_trackers'}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果我尝试登录(或在这种情况下注销),我会收到以下错误:

Template is missing

Missing template user_trackers/new with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view …
Run Code Online (Sandbox Code Playgroud)

ruby gem ruby-on-rails devise ruby-on-rails-3

3
推荐指数
1
解决办法
7009
查看次数

黄瓜 - 我应该在"最后"之前看到"第一" - Rails 3.1

[注意:使用Rails 3.1.]

我试图测试在我的页面上以正确的顺序显示多个模型,在我的情况下,通过desc date以最新的顶部显示.

我知道我可以执行以下操作来检查页面上是否存在某些内容:

And I should see "Some content on my page."
Run Code Online (Sandbox Code Playgroud)

但我想做的事情是:

And I should see "Most Recent" before "Really old"
Run Code Online (Sandbox Code Playgroud)

我将如何编写执行此操作的步骤?我相信"而且我应该看到"只扫描整个页面以查找指定的参数,只是不确定如何处理正确的顺序.

提前致谢!

testing integration-testing cucumber ruby-on-rails-3.1

3
推荐指数
1
解决办法
1030
查看次数

Ruby正则表达式:找到最后一个标点符号

我试图在句子中找到最后一个标点符号或空格字符.

鉴于我有句, "Hello! What is your name?"

我希望正则表达式返回索引?,但我的正则表达式返回索引!

我的尝试:

> s = "Hello! What is your name?"
> s =~ /([[:punct:]\s])/
> puts $+
!
=> nil
Run Code Online (Sandbox Code Playgroud)

我相信$+返回最高匹配,所以最后一场比赛,但它只匹配第一场比赛.

思考?提前致谢!

ruby regex

3
推荐指数
1
解决办法
1165
查看次数

Rails - 防止Internet Explorer

有没有办法阻止Internet Explorer访问Web应用程序?

事实上,我不介意显示一个静态页面,通知他们下载Firefox.我想停止支持IE,但我不确定最好的方法.

browser internet-explorer ruby-on-rails

3
推荐指数
1
解决办法
890
查看次数

Hartl Ruby-on-Rails教程(3.2),第7.2节 - 注册表单缺少模板

我在测试ruby-on-rails教程的注册页面时遇到以下错误:

Failures:

1) User pages signup with valid information should create a user
 Failure/Error: expect { click_button submit }.to change(User, :count).by(1)
 ActionView::MissingTemplate:
   Missing template users/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in:
     * "/Users/Fif/rails_projects/sample_app/app/views"
 # (eval):2:in `click_button'
 # ./spec/requests/user_pages_spec.rb:43:in `block (5 levels) in <top (required)>'
 # ./spec/requests/user_pages_spec.rb:43:in `block (4 levels) in <top (required)>'

Finished in 0.76918 seconds
35 examples, 1 failure

Failed examples:

rspec ./spec/requests/user_pages_spec.rb:42 # User pages signup with valid information should create a user
Run Code Online (Sandbox Code Playgroud)

我不确定问题是什么,我已经多次查看代码以确保它与书中的示例相符.我很确定它与new.html.erb文件有关

user_pages_spec.rb …

ruby-on-rails

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

是否可以在Rails中跨多个数据库进行内部联接?

我很难通过has_many :through关联访问数据,其中一些表位于单独的数据库中。

# database_one
class Input < ApplicationRecord
  belongs_to :user      # Works great
end

# database_two
class User < AbstractClass
  belongs_to :group     # Works great
  has_many :inputs      # Works great
end

# database_two
class Group < AbstractClass
  has_many :users                     # Works great
  has_many :inputs, through: :users   # Does not work at all
end

class AbstractClass < ApplicationRecord
  self.abstract_class = true
  establish_connection "database_two_#{Rails.env}".to_sym
end
Run Code Online (Sandbox Code Playgroud)

因此,使用上面的代码,我可以执行以下操作:

Group.first
=> #<Group id: 1...

User.first
=> #<User id: 1...

User.first.inputs
=> #<ActiveRecord::Associations::CollectionProxy []> …
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord join ruby-on-rails

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

如果我的工厂验证失败,如何提出错误?

如果我使用FactoryBot创建记录,但验证失败,则仅返回未保存的实例。有没有办法让FactoryBot抛出错误来帮助我及早调试问题?

FactoryBot.create(:house, some_options)
=> #<House id: nil, ...>
Run Code Online (Sandbox Code Playgroud)

测试将继续进行,并最终会在其他地方失败,因为我的对象无效。

我的第一个想法是创建一个特性,并以某种方式将其默认给所有工厂,但是我没有看到一种简单的方法。

trait :ensure_validity do
  before(:create) do |obj|
    raise StandardError unless obj.valid?
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails factory-bot

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

阵列到单个部分

我正在尝试使用以下内容收集来自一群人的电子邮件:

def representative_email(group)
  group.representatives.collect{ |m|
    rep.User.find(m.user_id)
    rep.email
  }
end
Run Code Online (Sandbox Code Playgroud)

然而,这产生的结果如下: ["email@email.com", "email2@email.com"]

如何删除所有[]并且""仅离开:

email@email.com, email2@email.com
Run Code Online (Sandbox Code Playgroud)

事实上,最好用分号替换逗号.

ruby arrays ruby-on-rails-3

0
推荐指数
1
解决办法
90
查看次数