目标是创建一个自定义路由,以便/ undead将转到ZombiesController上的不死行为.
我的代码:
TwitterForZombies::Application.routes.draw do
resources :zombies
match 'show_zombie' => "undead#show"
end
Run Code Online (Sandbox Code Playgroud)
错误......"没有添加正确的路线,无法进入ZombiesController#不死族."
我不知道我哪里出错了....
我正在尝试将一个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) [注意:使用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)
我将如何编写执行此操作的步骤?我相信"而且我应该看到"只扫描整个页面以查找指定的参数,只是不确定如何处理正确的顺序.
提前致谢!
我试图在句子中找到最后一个标点符号或空格字符.
鉴于我有句, "Hello! What is your name?"
我希望正则表达式返回索引?,但我的正则表达式返回索引!
我的尝试:
> s = "Hello! What is your name?"
> s =~ /([[:punct:]\s])/
> puts $+
!
=> nil
Run Code Online (Sandbox Code Playgroud)
我相信$+返回最高匹配,所以最后一场比赛,但它只匹配第一场比赛.
思考?提前致谢!
有没有办法阻止Internet Explorer访问Web应用程序?
事实上,我不介意显示一个静态页面,通知他们下载Firefox.我想停止支持IE,但我不确定最好的方法.
我在测试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文件有关
我很难通过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) 如果我使用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) 我正在尝试使用以下内容收集来自一群人的电子邮件:
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 ×3
activerecord ×1
arrays ×1
browser ×1
cucumber ×1
devise ×1
factory-bot ×1
gem ×1
join ×1
postgresql ×1
regex ×1
routing ×1
testing ×1