5

我正在尝试 railscast#238。我正在使用 rails 4 和 mongoid(4.0.0)。当尝试使用 date_select 助手添加 published_on 字段时。它无法保存到集合中。然后,我在 permit 函数中添加了 :published_on 。但后来我也遇到了错误。我也试过包括 Mongoid::MultiParameterAttributes 但没有找到。我认为它已从 mongoid 中删除。以下是日志文件中的错误:

日志文件

ArticlesController#update 处理为 HTML 参数:{"utf8"=>"✓", "authenticity_token"=>"3+y5UUckEDqJRPwdibdlhwAxKHi1g2ECF/4SzFNVbJE=", "article"=>{"name"=>"sachin", "published_on (1i)"=>"2013", "published_on(2i)"=>"4", "published_on(3i)"=>"10", "content"=>"s'up?"}, "commit" =>"更新文章", "id"=>"522f4ce6f0b1817131000001"} MOPED: 127.0.0.1:27017 QUERY database=mongs_development collection=articles selector={"_id"=>"522f4ce6f0b1817131000001"} flags=[:slave_ok] limit= 0 skip=0 batch_size=nil fields=nil (0.5178ms) Completed 500 Internal Server Error in 3ms

Mongoid::Errors::UnknownAttribute (问题:试图为模型文章中不允许的 'published_on(1i)' 设置一个值。摘要:在模型中不包括 Mongoid::Attributes::Dynamic 并且属性不已经存在于属性哈希中,尝试调用 Article#published_on(1i)= 因为它是不允许的。这也是通过将属性传递给任何接受属性哈希的方法来触发的,并且引发而不是获得 NoMethodError。解决:如果您希望经常为未定义的字段写入值,则可以包含 Mongoid::Attributes::Dynamic。):app/controllers/articles_controller.rb:44:in block in update' app/controllers/articles_controller.rb:43:inupdate'

如果我从许可中删除 published_on:

参数:{"utf8"=>"✓", "authenticity_token"=>"3+y5UUckEDqJRPwdibdlhwAxKHi1g2ECF/4SzFNVbJE=", "article"=>{"name"=>"sachin", "published_on(1i)"=>" 2013", "published_on(2i)"=>"9", "published_on(3i)"=>"10", "content"=>"s'up?"}, "commit"=>"更新文章", "id"=>"522f4ce6f0b1817131000001"} MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1} (0.6187ms) MOPED: 127.0.0.1:27017 QUERY database=mongs_development collection=articles selector={ "_id"=>"522f4ce6f0b1817131000001"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.2012ms) 不允许的参数:已发布_on(1i)、已发布_on(2i)、已发布_on(3i) 重定向到

       http://localhost:3000/articles/522f4ce6f0b1817131000001

完成 302 发现在 5ms

在 2013 年 9 月 10 日 23:19:34 +0530 由 ArticlesController#show 处理为 HTML 参数:{“id”=>“522f4ce6f0b1817131000001”} MOPED:127.0.0.1 开始 GET "/articles/522f4ce6f0b1817131000001" 27017 QUERY database=mongs_development collection=articles selector={"_id"=>"522f4ce6f0b1817131000001"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3569ms) 渲染文章/show.html.erb在布局/应用程序内(0.6 毫秒)在 9 毫秒内完成 200 次 OK(查看次数:7.4 毫秒)

有人可以为此提供解决方案吗?

4

2 回答 2

2

您需要包含Mongoid::MultiParameterAttributes在您的文档类中。

在 Mongoid 4.0 中,您还需要在 yorlib/文件夹中定义该模块。请参阅此博客中的详细说明

于 2013-11-21T12:40:38.697 回答
0

我敢打赌你有这个功能

def article_params params.require(:article).permit!(:published_on) end

但你也需要...

Article.create(article_params)

不是

Article.create(params[:article])

希望这可以帮助,

-布赖恩

于 2013-11-04T17:02:58.900 回答