标签: devise

没有路由匹配"/ users/sign_out"设计rails 3

我在我的应用程序上安装了devise并在我的application.html.erb文件中应用了以下内容:

<div id="user_nav">
    <% if user_signed_in? %>
        Signed in as <%= current_user.email %>. This cannot be cheese?
        <%= link_to 'Sign out', destroy_user_session_path %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>
Run Code Online (Sandbox Code Playgroud)

我跑了rake routes并确认所有路线都有效.

另外,在我的routes.rb文件中我有devise_for :usersroot :to => "home#index".

单击"注销"链接时出现以下路由错误:

No route matches "/users/sign_out"
Run Code Online (Sandbox Code Playgroud)

是什么导致错误?

routes ruby-on-rails devise ruby-on-rails-3

385
推荐指数
18
解决办法
12万
查看次数

覆盖设计注册控制器

我在注册表单中添加了一个基于不同模型的字段,请参阅如何将嵌套属性与设计模型一起用于血淋淋的细节.这部分工作正常.

现在的问题是当我保存时,它在注册控制器的创建操作中失败,该操作由设备提供,Activerecord::UnknownAttributeError在该字段(公司)上.

我假设我需要覆盖注册控制器,还是有更好/更简单的方法我应该接近这个?

ruby-on-rails devise

231
推荐指数
5
解决办法
17万
查看次数

Heroku/devise - 缺少链接的主机!请提供:host参数或设置default_url_options [:host]

我想在heroku上推送我的应用程序.我还在开发中.我使用了可确认模块的设计.

当我尝试使用heroku控制台添加用户时出现此错误:

Missing host to link to! Please provide :host parameter or set default_url_options[:host]
Run Code Online (Sandbox Code Playgroud)

在测试和开发环境中,我有以下行:

environment/development.rb和environments/test.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
Run Code Online (Sandbox Code Playgroud)

我没有在生产环境中设置一些东西.

我试过推

config.action_mailer.default_url_options = { :host => 'mywebsitename.com' }
config.action_mailer.default_url_options = { :host => 'heroku.mywebsitename.com' }
Run Code Online (Sandbox Code Playgroud)

但它也不起作用..

我在网上看到它可能与ActionMailer有关,但我不知道我要配置什么.非常感谢你的想法!

编辑:

嗨,

为了在我推动heroku时不让我的应用程序崩溃,我把它放在我的env/test.rb和我的env/dev.rb(不在env.rb中,我认为这是因为它是rails 3应用程序)

config.action_mailer.default_url_options = { :host => 'yourapp.heroku.com' }
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在heroku控制台中创建用户时:

User.create(:username => "test", :email => "test@test.com", :password => "test1234", :password_confirmation => "test1234", :confirmed_at => "2010-11-03 14:11:15.520128")
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

ActionView::Template::Error: Missing host to link to! Please provide :host parameter …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionmailer heroku devise

176
推荐指数
6
解决办法
9万
查看次数

如何删除设计注册的设计路线?

我在Rails 3应用程序中使用Devise,但在这种情况下,用户必须由现有用户创建,该用户确定他/她将拥有哪些权限.

因此,我想要:

  • 删除路线的用户注册.
  • 为了还允许用户编辑自己的个人资料(变更电子邮件地址和密码),双方已经签署了

我怎样才能做到这一点?

目前,我通过以下方式有效地删除了这条路线devise_for :users:

match 'users/sign_up' => redirect('/404.html')
Run Code Online (Sandbox Code Playgroud)

这有效,但我想有更好的方法,对吧?

更新

正如Benoit Garret所说,在我的情况下,最好的解决方案是跳过创建注册路线,并创建我真正想要的那些.

为此,我首先运行rake routes,然后使用输出重新创建我想要的.最终结果如下:

devise_for :users, :skip => [:registrations] 
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put 'users' => 'devise/registrations#update', :as => 'user_registration'
end
Run Code Online (Sandbox Code Playgroud)

注意:

  • 我仍然:registerable在我的User模型
  • devise/registrations 处理更新电子邮件和密码
  • 更新其他用户属性 - 权限等 - 由不同的控制器处理

实际答案:

删除默认Devise路径的路由; 即:

devise_for :users, path_names: {
  sign_up: ''
}
Run Code Online (Sandbox Code Playgroud)

routing devise ruby-on-rails-3

145
推荐指数
7
解决办法
5万
查看次数

从Ruby控制台创建设计用户

有关如何使用ruby控制台设计和保存新User对象的任何想法?

当我试图保存它时,我总是假的.我想我错过了一些东西,但我找不到任何相关的信息.

ruby ruby-on-rails devise

140
推荐指数
4
解决办法
8万
查看次数

所有Ruby测试都提出了:nil的未定义方法`authenticate':NilClass

我的大多数测试都提出了以下内容,我不明白为什么.所有方法调用都会引发"authenticate"错误.我检查了代码是否有一个名为"authenticate"的方法,但没有这样的方法.

  1) Admin::CommentsController handling GET to index is successful
     Failure/Error: get :index
     undefined method `authenticate!' for nil:NilClass
     # ./spec/controllers/admin/comments_controller_spec.rb:9:in `block (3 levels) in <top (required)>'


  124) PostsController handling GET for a single post should render show template
     Failure/Error: get :show, :year => '2008', :month => '01', :day => '01', :slug => 'a-post'
     undefined method `authenticate' for nil:NilClass
     # ./app/controllers/application_controller.rb:18:in `set_current_user_for_model'
     # ./spec/controllers/posts_controller_spec.rb:131:in `do_get'
     # ./spec/controllers/posts_controller_spec.rb:140:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

该项目可以在那里找到=> https://github.com/agilepandas/enki,以防你想自己运行测试.

ruby testing rspec ruby-on-rails devise

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

在不同的控制器中设计表单

我正在为sign_in/sign_out程序使用设计宝石.

我使用设计生成了视图文件 rails g devise views

我看到有一个devise/sessions/new.html.erb文件,其中包含sign_in的表单.

我创建了另一个文件devise/sessions/_form.html.erb并<%= render 'form' %>在new.html.erb文件中完成,并且效果非常好.

现在,我想从不同的控制器中包含这个表单.所以在名为'main'的控制器中,(具体地,在视图页面内)'mains/index.html.erb'我包含了<%= render 'devise/sessions/form' %>文件.似乎包含工作正常,但我收到以下错误.

NameError in Mains#index

Showing /home/administrator/Ruby/site_v4_ruby/app/views/devise/sessions/_form.html.erb where line #1 raised:

undefined local variable or method `resource' for #<#<Class:0x007f1aa042d530>:0x007f1aa042b870>
Extracted source (around line #1):

1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2:   <p><%= f.label :email %><br />
3:   <%= f.text_field :email %></p>
4: 
Run Code Online (Sandbox Code Playgroud)

似乎form_for(资源,...)部分导致问题(如果我在原始设计sign_in页面上工作正常...我怎么能以rails方式解决这个问题?

我个人更喜欢使用'render'函数来包含表单,而不是内联编写html代码.

我是否必须在'main'控制器中指定某些内容(资源)?

我将感谢你的帮助.谢谢.

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

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

如何使用Devise设置电子邮件确认?

是否有一个教程解释如何从头开始设置Devise的注册确认电子邮件(在开发和生产中),即如果您没有设置Action Mailer?

谷歌搜索刚刚发现了一堆与此相关的单独部分.没有一个人能够解释得足够多,而且我不确定它们是如何组合在一起的.是否有逐步解释,甚至是解释初始步骤的东西?


终于搞定了.按照下面接受的答案中的所有步骤,然后将以下内容添加到我的environment.rb文件中:

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
   :tls => true,
   :address => "smtp.gmail.com",
   :port => 587,
   :domain => "gmail.com",
   :authentication => :login,
   :user_name => "[username]",
   :password => "[password]"
 }
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionmailer confirmation devise

125
推荐指数
2
解决办法
7万
查看次数

rails - 设计 - 处理 - devise_error_messages

在我的用户编辑页面中,有一行如下:

<%= devise_error_messages! %>
Run Code Online (Sandbox Code Playgroud)

问题是这不是输出错误的标准方式,应用程序的其余部分:

<% flash.each do |key, value| %>
    <div class="flash <%= key %>"><%= value %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何让设计错误消息像使用flash.each的其他人一样工作?

谢谢.

ruby-on-rails devise

123
推荐指数
7
解决办法
8万
查看次数

设计 - 我如何禁止某些用户登录?

我在我的应用程序中使用Devise进行身份验证.

我如何禁止某些用户登录 - 禁用某个用户?

ruby-on-rails devise

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