SimpleCaptcha图像未加载(无法批量分配受保护的属性)

时间:2014-02-19 06:09:27

标签: ruby-on-rails ruby-on-rails-4 simplecaptcha

问题是simple_captcha无法正常工作。验证码图像未显示。请帮忙。

controller.rb

if simple_captcha_valid?
  do something
else
  do something else
end

view.html.rb

<div class="captcha">
  <%= show_simple_captcha(label: "", placeholder: "", code_type: "numeric") %>   
</div>

的Gemfile

gem 'simple_captcha2', require: 'simple_captcha'

错误

SimpleCaptcha::SimpleCaptchaData Load (1.3ms)  SELECT "simple_captcha_data".* FROM "simple_captcha_data" WHERE "simple_captcha_data"."key" = '******' ORDER BY "simple_captcha_data"."id" ASC LIMIT 1
**WARNING: Can't mass-assign protected attributes for SimpleCaptcha::SimpleCaptchaData: key**

4 个答案:

答案 0 :(得分:4)

我有同样的问题(使用Rails 3)。但是通过添加

来解决它

simple_captcha_gem_dir / LIB / simple_captcha / simple_captcha_data.rb

attr_accessible :key, :value

在我的情况下, simple_captcha_gem_dir 〜/ .rvm / gems / ruby​​-1.9.3-p484 / bundler / gems / simple-captcha-2602bf19a63d <登记/> (当然,对于生产,你可以创建一个fork而不是编辑本地gem文件)

答案 1 :(得分:4)

这是另一种解决方案:

将其放入初始值设定项(config/initializers/simple_captcha.rb

Rails.configuration.to_prepare do
  class SimpleCaptcha::SimpleCaptchaData < ::ActiveRecord::Base
    attr_protected
  end
end

感谢@zealot128

答案 2 :(得分:1)

看着你的电话<%= show_simple_captcha(:label => "", :placeholder => "", :code_type => "numeric") %>,好像你正在使用基于控制器的simple_captcha实现

我没有看到您的ApplicationController代码,但请确保app/controllers/application.rb

中包含以下行
ApplicationController < ActionController::Base
  include SimpleCaptcha::ControllerHelpers
end

更新模型示例:

class User < ActiveRecord::Base
  apply_simple_captcha
end

class User < ActiveRecord::Base
  apply_simple_captcha :message => "The secret Image and code were different", :add_to_base => true
end

答案 3 :(得分:1)

我在Rails 4.1.4,Ruby 2.1.2中遇到了同样的问题 我在simple_captcha.rb中使用了以下配置

Rails.configuration.to_prepare do
  class SimpleCaptcha::SimpleCaptchaData < ::ActiveRecord::Base
    attr_protected :captcha, :captcha_key
  end
end

...但 正如我在.rvm/gems/bundler中的简单验证码控制器中注意到的那样,验证码密钥/值通过params [:captcha_key]和params [:captcha]传递,这会产生问题,因为在视图中我使用了

<%= f.simple_captcha :label => "Enter numbers.." %> 

其中params通过params[:MODEL][:captcha]

传递

...这样 现在我只是在控制器中添加了一个set_captcha动作来设置

params[:captcha] = params[:MODEL][:captcha]
params[:captcha_key] = params[:MODEL][:captcha_key]

我正在寻找更好的解决方案,任何想法?