Tag: 设计

如何在Capybara测试中使用Rspec确定Warden / Devise

我想在我的Rails应用程序中使用Capybara测试套件中的rspec模拟存根登录用户(使用Devise / Warden)。 这将节省大量时间,并且意味着我的测试套件可以/将定期运行。 以前我可以使用authlogic来执行此操作,方法是使用以下代码来截断我的会话模型: def login(user) user_session = mock_model(UserSession, {:user => user}) UserSession.stub(:find).and_return(user_session) end 现在我正在使用Devise,我再也无法访问UserSession对象了。 因为我使用capybara来测试我的代码,所以我没有直接访问请求对象来使用sign_in内置的sign_in测试助手。 我的问题是:如何使用水豚,设计和规范模拟模拟登录用户,而不需要每个具有登录用户的方案首先进入注册路径,填写表单,提交,等待响应,以及然后转到所需的页面?

为什么在Ruby中将0视为真?

我正在阅读优秀的Ruby on Rails教程并遇到以下代码。 if 0 true else false end 以上返回true并说明了与许多语言不同(C是明显的例子),ruby将0视为true 。 我没有把这种行为视为特质,而是假设有一个很好的理由让这种重大偏离惯例。 例如,Python将0视为False ,正如人们所期望的那样。 简而言之,设计ruby以将0视为true的理由是什么?

如何通过它的会话ID找到设计用户?

给定session[“session_id”]是否可以找到该会话所属的登录User ?

允许用户编辑帐户而不将设计和传递条件中的密码保存到Ruby中的reject_if

我正在开发一个ROR应用程序,当涉及到设计和密码确认时我就陷入了困境。 我希望我的用户能够编辑他们的信息(姓名,位置等)而无需输入和确认他们的密码(除非他们决定更改他们的密码,在这种情况下,这些字段将是必需的。 ) 在设计时我做了一些阅读,我注意到这是一个常见的问题。 不幸的是,我尝试了在设计GitHub repo上发布的所有解决方案,但无法解决我的问题。 然而,我发现了一种解决方法,但我希望这是最后一步的问题。 这是我的players.rb文件的一小部分(我有两套帐户 – 玩家和所有者): has_one :account, :as => :profile accepts_nested_attributes_for :account, :reject_if => proc { |attributes| attributes[‘password’].blank? } 我的accounts.rb文件如下所示: devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_me, :invited_by, :invited_by_id 正如它现在设置的那样,玩家可以编辑他们的个人资料而无需输入密码,除非他们正在尝试编辑:密码字段 – 这非常好,而且我想要的结果。 但是,我遇到了一个小问题…… :reject_if => proc […]

无法加载此类文件 – 1.9 / bcrypt_ext(LoadError)

嘿,当我尝试启动rails服务器时,我得到以下错误 有任何想法吗? 目前还没有可行的解决方案…… 顺便说一句,我运行Windows 8 ……可能是问题所在:D C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require’: cannot load such file — 1.9/bcry pt_ext (LoadError) from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:236:in `load_dependency’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/bcrypt-ruby-3.1.0-x86-mingw32/lib/bcrypt_ext.rb:2:in `’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:236:in `load_dependency’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/bcrypt-ruby-3.1.0-x86-mingw32/lib/bcrypt.rb:12:in `’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `require’ from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `block (2 levels) […]

Rails3设计未定义的方法`confirmation_url’

我似乎为我的用户身份validation设置了Devise,并设置了:确认选项。 当我在浏览器中运行它时,一切似乎运行良好,我注册,转到我的rails s控制台中的服务器日志中显示的确认URL。 但是,当我尝试将以下内容添加到我的db / seed.rb时 User.create!(:username => ‘haar’, :email => ‘haar@example.com’, :password => ‘password’, :password_confirmation => ‘password’) 并运行rake db:setup –trace 我收到以下错误: rake aborted! undefined method `confirmation_url’ for #<#:0x1062f6618> /Users/haar/Dropbox/Websites/TenOutOfTen/app/views/devise/mailer/confirmation_instructions.html.haml:4:in `_app_views_devise_mailer_confirmation_instructions_html_haml___1737567023_2199377480_0′ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/template.rb:135:in `send’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/template.rb:135:in `render’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications.rb:54:in `instrument’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/template.rb:127:in `render’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/render/rendering.rb:59:in `_render_template’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications.rb:52:in `instrument’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications/instrumenter.rb:21:in `instrument’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.8/lib/active_support/notifications.rb:52:in `instrument’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/render/rendering.rb:56:in `_render_template’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/action_view/render/rendering.rb:26:in `render_without_haml’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/haml-3.1.3/lib/haml/helpers/action_view_mods.rb:13:in `render’ /Users/haar/.rvm/gems/ruby-1.8.7-p334/gems/actionpack-3.0.8/lib/abstract_controller/rendering.rb:115:in `_render_template’ […]

使用Devise for Rails禁止/阻止用户的最佳方法是什么?

我在我的rails应用程序中使用Devise进行身份validation,我希望能够阻止某些帐户并阻止用户使用阻止的电子邮件重新注册。 我只是不确定最好的方法是什么。 我的第一个想法是覆盖会话和注册控制器来检查具有阻塞位的用户的模型,但我感觉可能有更优雅的方式。

Ruby on rails:设计,想添加邀请码?

我想为用户添加一个invite_code要求进行注册。 IE浏览器。 除了要求他们指定电子邮件/密码组合,我还想要一个额外的字段:invite_code。 这是一个临时修复,以便非通缉的用户在给定的alpha期间无法登录。 我很困惑,因为Devise没有添加控制器。 我对虚拟属性的概念很熟悉,我觉得我可以将:invite_code添加到模型中,然后只需硬编码一步就可以说邀请代码必须等于12345或者其他任何东西。 设计认证是否有意义? 我如何从适当的轨道安静的方法接近这个? 非常感谢你。

仅允许管理员用户使用Devise在Rails中创建新用户(无外部模块)

目前,我的Users数据库有一个名为“admin”的列,其中包含一个布尔值,默认设置为false。 我有一个管理员用户播种到数据库中。 如何编写我的应用程序,以便管理员用户可以创建新用户,但不是的用户不能? (另外,用户只能由管理员创建) 似乎应该有一个简单的方法来设计,不涉及使用一些外部模块。 但到目前为止,我还没有找到满意的答案。 我更有可能标记出只有设计的解决方案。 (其中一个只是标准的MVC / Rails解决方案加一个)然而,如果真的有更好的方法来做不涉及CanCan我也可以接受。 注意: 我一直在寻找一段时间,我发现了其他几个与此问题非常类似的stackoverflow问题,但要么没有完全回答问题,要么使用其他非设计模块。 (或两者)

如何在rspec特性测试中访问(设计)current_user?

在设计文档中,他们提供了有关在测试控制器时如何访问current_user的提示: https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29 但是,在进行function测试时呢? 我正在尝试测试我的一个控制器的create方法,并在该控制器中使用current_user变量。 问题是设计中建议的宏使用@request变量,对于特征规范它是零。 什么是变通方法? 编辑: 到目前为止,这是我目前的规格: feature ‘As a user I manage the orders of the system’ do scenario ‘User is logged in ad an admin’ do user = create(:user) order = create(:order, user: user) visit orders_path #Expectations end end 问题是在我的OrdersController我有一个current_user.orders调用,并且由于current_user没有定义,它会将我重定向到/users/sign_in 。 我在/spec/features/manage_orders.rb下定义了这个