Tag: 设计

使用Rails和Devise进行function测试。 把什么放在我的灯具里?

嗨,我想对使用Devise和CanCan的Rails 3应用程序进行一些function测试。 在我的用户模型中,我有用户年龄,我想测试一个用户只能访问某个页面,如果它们是: 登录 超过35岁 我在Devise文档中看到我可以使用:* sign_in *并且我把它放在我的测试中它似乎工作 – 测试没有错误,因为我有: include Devise::TestHelpers 在我的* test_helper.rb * 当我拿出它时,我的测试会出错,因为* sign_in *没有定义。 所以这不是帮手问题。 当我运行测试并检查span#loggedin是否有一次出现时,测试失败,因为有0次出现。 span#loggedin仅出现* if user_signed_in?* 我需要在我的灯具或测试中创建一个也是完全注册用户(已确认等)的测试用户? 查看代码: User is signed in User age is 测试代码: test “should get index” do sign_in :one get :index assert_response :success assert_select ‘span#loggedin’, :count => 1 end 夹具: one: email: jez@example.com age: […]

同时使用帐户和用户表与Devise

我正在使用Rails 3.1.0和Devise 1.4.8,对我们两个都是新手。 我想允许多个用户使用帐户。 第一个注册用户创建帐户(可能是他们的公司),然后该用户可以添加更多用户。 用户始终只链接到一个帐户。 我有用户和帐户表。 缩写模型: class User < ActiveRecord::Base belongs_to :account devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :lockable, :timeoutable attr_accessible :email, :password, :password_confirmation, :remember_me end class Account :destroy attr_accessible :name, :account_type end 问题是,当第一个用户注册时,如何创建帐户和用户? 我是否需要修改/覆盖Devise registrations_controller,就像这里的答案一样? 我无法弄清楚如何创建帐户然后将其传递给Devise以创建用户。 account_id已在User模型中。 我应该将account_name和account_type添加到User模型,如果未传入account_id,还要创建一个新的Account记录? 在这种情况下,我试图隐藏Devise中的帐户创建,但不确定是否可行,因为我仍需要在注册页面上提示account_name和account_type。

设计用户档案link_to

所以我目前正在尝试找出使用的路径,因此当用户点击“查看个人资料”时,链接将是domain.com/USERNAME而不是domain.com/profiles/show 我目前的链接代码是 我的routes.rb设置为 get ‘/:id’ to: ‘profiles#show’

使用Devise的Rails应用程序使用session_id和remember_user_token之间的区别

我正在使用Devise-1.5.4和Rails 3.0.20。 以下是我所知道的事实: session_id与浏览器有一个Cookie,可以帮助普通应用程序唯一地跟踪会话。 可能有也可能没有用户登录。 如果用户已登录(并假设他选择了remember_me),那么浏览器中还有另一个与remember_user_token相关的Cookie。 在我的应用程序中,我使用(设计提供)方法,如current_user , authenticate_user! validation用户。 以上方法调用authenticate! ,它本身调用serialize_from_cookie ,它使用remember_token来validation用户。 我对session_id的使用有点困惑。 什么时候使用,怎么样? 如果用户已登录,对于我的rails应用程序(或设计)来唯一标识用户,它是否会使用session_id? 当用户没有选择remember_me(并且没有remember_token )时会发生什么? 设计如何validationcurrent_user?

如何在Rails中的确认电子邮件中传递选项哈希中的额外参数?

我试图在确认电子邮件中的选项{}哈希中传递额外的参数,但它只显示主题和邮件中的标题。 这是我的代码 CustomMailer.confirmation_instructions(user,token, {custom_param: “abc”}) 当我在这样的模板中显示opts数据时 @first_name = opts 表明 {:subject=>”Email Confirmation”, :from=>”no-reply@sample.com”} 自定义邮件代码是 class CustomMailer < Devise::Mailer helper :application # gives access to all helpers defined within `application_helper`. include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` #include ApplicationHelper default template_path: 'devise/mailer' # to make sure that you mailer uses the devise views def confirmation_instructions(record, token, opts={}) […]

轨道中的事件触发系统设计

我正在重新设计我的活动源,我已经使用redis和rails实现了逻辑(顺便说一下,这很好用)但我仍然不确定如何创建/触发事件。 在我的第一种方法中,我使用了观察者,其缺点是没有current_user可用。 并且,无论如何使用观察者是一个坏主意:) 我首选的方法是在控制器中创建/触发事件,它应该看起来像: class UserController < LocationController def invite … if user.save trigger! UserInvitedEvent, {creator: current_user, …}, :create …. end end end 触发方法应该 使用一些参数创建UserInvitedEvent。 (:create可以是默认选项) 可以停用(例如停用以进行测试) 可以用例如resque执行 我看了一些gem(fnordmetrics,…),但我找不到一个光滑的实现。

使fields_for块有条件

我有一个用户模型和一个讲师模型。 用户和教师之间存在一对一的关系。 有些用户将是教师,有些则不会。 因此,我有一个注册表单,使用fields_for方法写入两者。 如何只在他们说自己是教师的情况下才能写入教师表,例如通过复选框。 当他们写作时,我想保持表格的其他表格的validation 理想情况下,如果我可以通过模型做到这一点,这将是最好的,但我对所有建议持开放态度。 讲师模型 class Instructor < ActiveRecord::Base belongs_to :user validates_presence_of :school_url, :etc… attr_accessible :school_url, :etc… end 用户模型 class User :destroy validates_uniqueness_of :email validates :email, :confirmation => true accepts_nested_attributes_for :instructor attr_accessible :email, :password, :instructor_attributes, :etc end HAML中的表格 – resource.build_instructor – form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| = hidden_field_tag […]

Rake DB出错:为Devise:Module迁移未定义的方法`confirm_within =’

我在尝试运行DB时收到此错误:Rake: ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment Resolved collector.newrelic.com to 204.93.223.153 rake aborted! undefined method `confirm_within=’ for Devise:Module /Users/jasonvdm/development/rails/config/initializers/devise.rb:66:in `block in ‘ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/devise-2.1.2/lib/devise.rb:247:in `setup’ /Users/jasonvdm/development/rails/config/initializers/devise.rb:3:in `’ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:234:in `load’ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:234:in `block in load’ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:223:in `block in load_dependency’ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:640:in `new_constants_in’ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:223:in `load_dependency’ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:234:in `load’ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/railties-3.1.3/lib/rails/engine.rb:556:in `block (2 levels) in ‘ /Users/jasonvdm/.rvm/gems/ruby-1.9.3-p194@wheelz/gems/railties-3.1.3/lib/rails/engine.rb:555:in `each’ […]

使用params hash的内容手动实例化Devise用户模型

我正在试图解决这个问题: 有一个注册模块,它对主设备注册控制器进行了一步,我必须使用User.new(…)手动实例化Devise生成的用户模型。 我正在使用form_tag提交User.new()所需的所有必要参数。 这是我的代码的截断版本: def registration_three @user = User.new(:email => params[:email], :password => params[:password], :password_confirmation => params[:password_confirmation]) @user.save @user = User.new(:email => ‘patlopez@yahoo.com’, :password => ‘qwertyui’, :password_confirmation => ‘qwertyui’) @user.save end 第二个@ user.save有效,但第一个没有。 根据stdout中的print语句,params [:email],params [:password]和params [:password_confirmation]肯定存在。 有人有主意吗? 编辑:所以我尝试更改第二个User.new(…)中的所有单引号字符串,以引用存储在params哈希中的字符串……并且第二个实例化也失败了。 所以我很确定这个问题涉及双引号和单引号字符串。 任何人都知道如何将双引号字符串转换为单引号字符串? 提前致谢。

设计和独角兽的奇怪错误

我在开发过程中使用了许多我的rails应用程序,我每天都会遇到这些错误1-2次 NoMethodError: undefined method `users_url’ for # .0/gems/turbolinks-2.5.3/lib/turbolinks/ xhr_headers.rb: 21:in `_compute_redirect_to_location’ …0224210521/app/controllers/ /home/remmon/apps/myapp/releases/20150224210521/app/controllers/registrations_controller.rb registrations_controller.rb: 26:in `create’ …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 68:in `block in call’ …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 56:in `each’ …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 56:in `call’ …uby/2.1.0/gems/omniauth-1.2.2/lib/omniauth/ strategy.rb: 186:in `call!’ …uby/2.1.0/gems/omniauth-1.2.2/lib/omniauth/ strategy.rb: 164:in `call’ …ems/rack-mobile-detect-0.4.0/lib/rack/ mobile-detect.rb: 164:in `call’ …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 35:in `block in call’ …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 34:in `catch’ …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 34:in […]