Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道3和x2B;设计+;活动\u脚手架如何使不需要密码_Ruby On Rails_Devise_Activescaffold - Fatal编程技术网

Ruby on rails 轨道3和x2B;设计+;活动\u脚手架如何使不需要密码

Ruby on rails 轨道3和x2B;设计+;活动\u脚手架如何使不需要密码,ruby-on-rails,devise,activescaffold,Ruby On Rails,Devise,Activescaffold,我拥有基于Deave的模型代理: class Agency < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable attr_accessible :name, :email, :phone, :address, :city, :state, :zip,

我拥有基于Deave的模型代理:

class Agency < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :name, :email, :phone, :address, :city, :state, :zip,
                  :notes, :is_admin, :password, :password_confirmation, :remember_me

  protected

  def password_required?
   !persisted? || password.present? || password_confirmation.present?
  end
end
classagency
此外,我还有基于active_scaffold的代理控制器:

class Admin::AgenciesController < Admin::BaseController
  before_filter :authorize_admin!

  active_scaffold :agency do |conf|
    actions.exclude :show

    create.link.page = true
    update.link.page = true

    list.columns = [
      :name, :email, :phone, :address, :city, 
      :state, :zip, :notes, :events, :is_admin
    ]

    create.columns = [
      :name, :email, :phone, :address, :city, :state, :zip, 
      :is_admin, :password, :password_confirmation
    ]

    update.columns = [
      :name, :email, :phone, :address, :city, :state, :zip, 
      :is_admin, :password, :password_confirmation
    ]

    columns.add :password
    columns.add :password_confirmation    

    columns[:password].form_ui = :password
    columns[:password_confirmation].form_ui = :password
  end
end 
class Admin::AgenciesController
然后是机构更新表:

我想为用户提供一个不填写密码和密码确认字段的机会。但如果用户填写密码字段,则必须填写密码确认字段。

我差一点用密码解决了我的问题?方法。但javascript所需的客户端验证不允许我完全解决问题

如何从客户端删除密码和密码确认字段的JS变量?

试试:

validates_confirmation_of :password, :if => :password_required?

validates :password_confirmation, :presence => true, :if => '!password.nil?'
请注意,只有当
password\u required?
返回true时才会触发验证,如果
password\u required?
字段为nil,则
password\u confirmation将返回false

因此,为了使
password\u confirmation
字段为零,您只需从表单中删除
password\u confirmation
字段,这样您将始终获得零,从而绕过验证

替代解决方案:

(一)

2) 只需在密码字段中保存一个随机生成的安全数字(更好,因为这很容易,而且可以保持一致性)

此外,如果您希望这些字段的标识与用户留下的字段不同,那么您可以为它们提供唯一的密码,以便以后可以施加如下条件:

if(self.password == "something unique" and self.password_confirmation == "something unique")
    flash[:notice] = "The user has not password"
end

然后在UI级别,您只需使用上述条件显示为空白。

@Saurabh Jain,非常感谢您的建议。
但解决方案非常简单。
我发现active_scaffold为密码字段的输入标记添加了一个必需的属性。
换句话说,客户机得到一个html

<input type="password" required="required" size="30" name="record[password_confirmation]" id="record_password_confirmation_4" class="password_confirmation-input text-input" autocomplete="off">

要在Admin::AgenciesController中激活支架配置(请参见上文)

谢谢您的帮助。但这对我没有帮助。问题不在服务器端,而是在客户端。客户端上有一个js check required字段密码。为什么要进行js验证,为什么不能使用功能强大的
验证方法处理模型级别的所有验证?js验证会自动添加。我不知道是谁说的:)也许是主动的?好吧,那么诀窍就是随机生成密码字段。请参阅我的更新答案。非常感谢,但您的第二个备选解决方案对我来说绝对不清楚。我把你的密码放哪儿了?你的密码会覆盖我的密码吗?
<input type="password" required="required" size="30" name="record[password_confirmation]" id="record_password_confirmation_4" class="password_confirmation-input text-input" autocomplete="off">
columns[:password].required = false;