我在我的应用程序上安装了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 :users
和root :to => "home#index"
.
单击"注销"链接时出现以下路由错误:
No route matches "/users/sign_out"
Run Code Online (Sandbox Code Playgroud)
是什么导致错误?
我在注册表单中添加了一个基于不同模型的字段,请参阅如何将嵌套属性与设计模型一起用于血淋淋的细节.这部分工作正常.
现在的问题是当我保存时,它在注册控制器的创建操作中失败,该操作由设备提供,Activerecord::UnknownAttributeError
在该字段(公司)上.
我假设我需要覆盖注册控制器,还是有更好/更简单的方法我应该接近这个?
我想在heroku上推送我的应用程序.我还在开发中.我使用了可确认模块的设计.
当我尝试使用heroku控制台添加用户时出现此错误:
Missing host to link to! Please provide :host parameter or set default_url_options[:host]
Run Code Online (Sandbox Code Playgroud)
在测试和开发环境中,我有以下行:
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) 我在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) 有关如何使用ruby控制台设计和保存新User对象的任何想法?
当我试图保存它时,我总是假的.我想我错过了一些东西,但我找不到任何相关的信息.
我的大多数测试都提出了以下内容,我不明白为什么.所有方法调用都会引发"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,以防你想自己运行测试.
我正在为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'控制器中指定某些内容(资源)?
我将感谢你的帮助.谢谢.
是否有一个教程解释如何从头开始设置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) 在我的用户编辑页面中,有一行如下:
<%= 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的其他人一样工作?
谢谢.
我在我的应用程序中使用Devise进行身份验证.
我如何禁止某些用户登录 - 禁用某个用户?
devise ×10
actionmailer ×2
ruby ×2
confirmation ×1
heroku ×1
routes ×1
routing ×1
rspec ×1
testing ×1