【问题标题】:Rails Engage! Error (Can't mass-assign protected attributes: user)轨道接合!错误(无法批量分配受保护的属性:用户)
【发布时间】:2013-01-20 02:52:01
【问题描述】:

我正在安装Engage!

我按照此处的安装说明进行操作:http://engagecsm.com/readme

我做的安装步骤:

  1. 添加参与!到应用程序的 Gemfile:gem 'engagecsm'。
  2. 安装它:捆绑安装。
  3. 运行生成器:rails generate 参与用户。
  4. 运行迁移:rake db:migrate。

现在,我可以去 localhost:3000/engage

这是显示的内容:

现在,当我点击“创建主题”时,网站上什么也没有发生。我查看了我的 Rails 服务器控制台,我看到了这个:(更容易在此处查看 http://i.stack.imgur.com/xKBER.png,在底部找到完整的堆栈跟踪)

所以我开始用谷歌搜索,我看到这样的事情:

我已经将 attr_accessible :user 添加到我的用户模型中,但这不起作用。

这是我的用户模型:

另外,我看不到如何访问 Engage 模型等,请参阅这里是我的目录:

有谁知道如何解决这个问题?如果您需要任何其他信息,请告诉我,我会提供截图。

非常感谢任何帮助。谢谢!

编辑 #1 - 添加应用程序控制器图片和完整堆栈跟踪

这是我唯一可以通过 Engage 看到任何内容的地方!在控制器中(我目前没有用户控制器)

这是完整的堆栈跟踪:

编辑 #2 - 添加参与环境:

此外,我们还安装了 Devise(我相信还有 OmniAuth...)。因此,我们有“current_user”,但我不知道我们是否有“用户名”或“电子邮件”方法,除非这是 Devise 或其他东西的标准

编辑 #3 - 正如 Geoff 所建议的,我查看了 topic_controller 的第 46 行。该行如下:

@topic.votes.create(:user =>engage_current_user)

【问题讨论】:

  • 您发布了很多有用的信息,但您能否包含错误的完整堆栈跟踪?
  • 当然!我刚刚添加了完整的堆栈跟踪。如果有任何其他信息我可以提供有用的信息,请告诉我!我还添加了engage.rb环境文件,可能有用,我不确定。
  • 不要发布文本图像,而是复制并粘贴实际文本。文本图像不易解析、搜索或访问。
  • 您提出了一个有效的观点。我理解你的话背后的动机。但是,这些图片中的文字通常会淡化这个问题的焦点。例如,我不会通过让这个问题稀释对“rails 信誉系统”的查询来帮助搜索算法,这将是添加我的用户模型文本的结果。我简洁地总结了标题中的重要文字:“Rails Engage!错误(无法批量分配受保护的属性:用户)”。此外,我发现看似无穷无尽的文字墙会迅速侵蚀用户阅读和提供有价值答案的动力。
  • @FoolishChap 如果我是盲人想回答你的问题怎么办?或者认为您的问题可能会解决我的问题,但实际上无法弄清楚您做了什么?

标签: sql ruby-on-rails ruby ruby-on-rails-3 rubygems


【解决方案1】:

这是 Engage 之一!开发商在这里。我可以看到 Engage 有两个问题!如上所述。

我们已经找到了第一个的解决方案(您使用 attr_accessible :user 解决的那个),所以期待 Rubygems 尽快更新。

第二个(主题实际上并未显示在索引页面上的事实)与 cancan gem 中的更改有关。我们仍然需要找出解决这个问题的最佳方法,但一个快速的解决方法是在 Gemfile 中锁定 cancan 版本,如下所示:gem 'cancan', '1.6.7'

我们会在 Rubygems 推出解决这些问题的更新时通知您。

干杯!

【讨论】:

    【解决方案2】:

    根据所提供的信息,恐怕我无法判断发生了什么,但我可以帮助对您遇到的错误进行一些解释。

    跟踪中最后一个非库行是:

    engagecsm (1.0.8) app/controllers/engage/topics_controller.rb:46:在“创建”中

    此代码可能在您的默认 gem 路径中。如果您在 *nix 上,可能是 /usr/lib/ruby/gems/home/user_name/.gem/ruby

    在处理那行代码的某个时候,它遇到了批量分配安全错误。

    它可能有助于您查看该行代码以了解它所针对的模型。 请勿在此处发布该行代码。 Engage 的许可证!似乎不是标准的开源之一,如果您在此处发布,您可能违反了许可。我很可能是错的,但总比抱歉更安全。

    有两个变量可能会让您因批量分配安全性而受挫。它们是属性和角色。仅当他们使用默认角色时,将attr_accessible :user 添加到适当的模型才会有所帮助。如果他们使用:admin 角色,那么您需要添加attr_accessible :user, as: :admin。我认为您的User 模型没有:user 的属性,因此可能需要在其他地方添加它。

    如果我不得不猜测你做错了什么,我想你可能已经遵循了这里的安全指南:

    http://guides.rubyonrails.org/security.html

    在该指南中,他们建议将您的配置设置为默认将所有内容列入白名单。

    config.active_record.whitelist_attributes = true
    

    如果您这样做并参与!不是在 MassAssignment 支持下编写的,这可以解释您看到的错误。

    抱歉,我无法确定地解释您的问题,但我希望它仍然对您有所帮助。

    【讨论】:

    • 感谢您的帖子 Geoff。我正在听从您的建议,调查参与 gem 中的代码。当我有更多信息时,我会报告。谢谢!
    • 哇,这帮了大忙。我在解决问题时陷入困境!我还没有弄清楚,但看看第 46 行:@topic.votes.create(:user =>engage_current_user)
    【解决方案3】:

    查看您的 ,您的问题出在 topices_controller 中 - 因此可能意味着您需要将 :user_id 添加到 Engage/Topic 模型中的 attr_accessible

    【讨论】:

    • 这很接近,让我解决了这个错误。谢谢!事实证明,我需要将“attr_accessible :user”添加到参与/投票模型中。
    【解决方案4】:

    我需要将以下行添加到参与/投票模型

    attr_accessible :user
    

    现在它会显示“主题已成功创建”。

    但是,我看不到列出的主题。但是,我相信我已经解决了这部分问题。我去的时候能看到题目

    http://localhost:3000/engage/topics/1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多