Ruby on rails 如何在RubyonRails中正确地向数据库添加默认条目?
我在seeds.rb中的条目大多很简单,如下所示:Ruby on rails 如何在RubyonRails中正确地向数据库添加默认条目?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我在seeds.rb中的条目大多很简单,如下所示: User.create!( name: "Peter" admin: false; # etc. ) 如果出现“无法批量分配受保护的属性”错误,我会在模型中做一个小更改,在本例中为user.rb: attr_accessible: name, admin 到目前为止还不错。但是,我该如何将条目植入rails gem生成的表中,rails gem为我的应用程序添加了另一个引擎,例如我相信还有其他人 我已将这些条目添加到seeds.rb文件中:
User.create!(
name: "Peter"
admin: false;
# etc.
)
如果出现“无法批量分配受保护的属性”错误,我会在模型中做一个小更改,在本例中为user.rb:
attr_accessible: name, admin
到目前为止还不错。但是,我该如何将条目植入rails gem生成的表中,rails gem为我的应用程序添加了另一个引擎,例如我相信还有其他人
我已将这些条目添加到seeds.rb文件中:
Forem::Category.create!(
name: "cat1"
)
Forem::Forum.create!(
title: "forum1",
description: "forum1 description",
category_id: 1
)
Forem::Topic.create!(
forum_id: 1,
user_id: 1,
subject: 'topic1',
locked: false,
pinned: false,
hidden: false,
)
require 'active_record/fixtures'
Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "topics.yml")
类别和论坛已生成,主题不是:
Can't mass-assign protected attributes: forum_id, user_id, locked, pinned, hidden
如果我有一个topic.rb模型,我就会知道该怎么做但我没有。Forem是一名工程师,我不知道如何使model topic.rb的某些属性可见
我知道application.rb中的这一行:
config.active_record.whitelist_attributes = true
启用质量分配保护。禁用它会留下一个巨大的安全漏洞,所以这不是一个选项。禁用它也不允许我进入主题表
我也尝试过使用固定装置。我在seeds.rb文件中添加了以下内容:
Forem::Category.create!(
name: "cat1"
)
Forem::Forum.create!(
title: "forum1",
description: "forum1 description",
category_id: 1
)
Forem::Topic.create!(
forum_id: 1,
user_id: 1,
subject: 'topic1',
locked: false,
pinned: false,
hidden: false,
)
require 'active_record/fixtures'
Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "topics.yml")
test/topics.yml:
one:
id: 1
forum_id: 1
user_id: 1
subject: "topic1"
created_at: 2012-05-19 19:54:19
updated_at: 2012-05-19 19:54:20
locked: false
pinned: false
hidden: false
last_post_at: 2012-05-19 19:54:21
state: "open"
views_count: 3
我得到的错误是-未初始化常量装置
我的种子有什么问题?还是应该使用迁移?Seeds.rb只是ruby代码。您不必在一行中创建整个资源。试试这样的
topic = Forem::Topic.create(
:subject => "topic 1",
:locked => false
# etc
)
topic.user_id = 1
topic.save
rb只是ruby代码。您不必在一行中创建整个资源。试试这样的
topic = Forem::Topic.create(
:subject => "topic 1",
:locked => false
# etc
)
topic.user_id = 1
topic.save
禁用它会留下一个巨大的安全漏洞,所以这不是一个选项`
不,这不是一个巨大的安全漏洞。这是一个有争议的争论,但是attr\u accessible
(和变体)不是一个很好的解决问题的方法,这个问题阻止用户创建/更新他们不应该创建的对象/属性。换句话说,attr\u accessible
是控制器问题的模型解决方案。因为这是控制器的工作,以确保数据被清理和可用,检查是否允许当前用户做这些事情,等等
所以我要做的是删除对attr\u accessible
的所有引用,并将whitelist\u属性设置为false
然后由您在控制器中过滤参数。你可以做你喜欢做的事,或者用你喜欢的任何其他方式
之后,您在播种时将不再存在这些问题
禁用它会留下一个巨大的安全漏洞,所以这不是一个选项`
不,这不是一个巨大的安全漏洞。这是一个有争议的争论,但是attr\u accessible
(和变体)不是一个很好的解决问题的方法,这个问题阻止用户创建/更新他们不应该创建的对象/属性。换句话说,attr\u accessible
是控制器问题的模型解决方案。因为这是控制器的工作,以确保数据被清理和可用,检查是否允许当前用户做这些事情,等等
所以我要做的是删除对attr\u accessible
的所有引用,并将whitelist\u属性设置为false
然后由您在控制器中过滤参数。你可以做你喜欢做的事,或者用你喜欢的任何其他方式
此后,您在播种时将不再存在这些问题我明白您的观点。但是将白名单属性设置为false并重新启动服务器并没有解决问题。我认为原因在于Forem gem。您需要删除attr\u accessible
和attr\u protected
说明,以了解您的观点。但是将白名单属性设置为false并重新启动服务器并没有解决问题。我认为原因在于Forem gem。您还需要删除attr\u accessible
&attr\u protected
指令