属性存在时重定向?

为了创建Honey pots字段,我在我的User模型中添加了一个虚拟属性,如果填入该属性,则会将用户发送回根页面:

 class User < ActiveRecord::Base attr_accessible :email, :password, :remember_me, :username, :fake_field attr_accessor :fake_field devise :database_authenticatable, :registerable............ before_create :setup_default_role_for_new_users ROLES = %w[admin default banned] def self.fake_field(string) end private def setup_default_role_for_new_users if self.fake_field.present? redirect_to root_url end if self.role.blank? self.role = "default" end end end 

该表单适用于注册,但在填写fake_field我得到:

 undefined local variable or method `root_url' for # 

这个可以吗? 这不会为机器人渲染404吗?

理想情况下,我希望机器人登陆404错误页面。

我同意MasterBlaster,这是控制器的任务。 您还不需要模型中的fake_field属性。

如果您想在表单上创建蜜jar,只需添加即可

<%= text_field_tag :email_confirmation, :style => "display: none" %>

到那种forms。

然后在控制器的方法中添加它,以便检查机器人是否正在尝试输入:

 class UsersController < ApplicationController def create render :status => 200 and return unless params[:email_confirmation].blank? # (your code) # ... end end 

我还建议你将蜜jar字段重命名为更聪明的东西(例如“电子邮件确认”),因为机器人在查找“假”字段时往往非常聪明。

编辑

您也不需要通知机器人他的行为不成功,也没有必要礼貌。 回答一个不错的200 (OK) 。 我相应地更新了我的post。

您不应该在模型中重定向。 此检查应在控制器中完成。 您可以在控制器中使用before_filter并使用其中的方法来检查和重定向。

您无法在模型中访问此辅助方法root_url 。 无论如何,这是错误的做法。