5

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

控制器.rb

if simple_captcha_valid?
  do something
else
  do something else
end

视图.html.rb

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

宝石文件

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

4 回答 4

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 文件)

于 2014-03-04T06:35:40.020 回答
4

这是另一个解决方案:

将其放入初始化程序 ( config/initializers/simple_captcha.rb)

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

感谢@zealot128

于 2014-07-24T08:43:47.083 回答
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[:MODEL][:captcha]

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

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

我正在寻找更好的解决方案,你知道吗?

于 2014-08-20T08:24:48.087 回答
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
于 2014-02-19T06:16:27.080 回答