Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在RubyonRails中正确地向数据库添加默认条目?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何在RubyonRails中正确地向数据库添加默认条目?

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文件中:

我在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
指令