Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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
Mysql 只有一行的Rails ActiveRecord数据库_Mysql_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Mysql 只有一行的Rails ActiveRecord数据库

Mysql 只有一行的Rails ActiveRecord数据库,mysql,ruby-on-rails,rails-activerecord,Mysql,Ruby On Rails,Rails Activerecord,是否有一种方法使数据库只允许一行(例如,用于站点范围的设置)?class which0,则将_添加到_基(“只能有一个”) 结束 结束 此行中是否只有一列?如果不是这样,那么通过迁移添加新列可能会有些过分。您至少可以使此表包含“name”和“value”列,并通过名称的唯一性进行验证。在Rails 4中: class Anything < ActiveRecord::Base before_create :only_one_row private def only_one_r

是否有一种方法使数据库只允许一行(例如,用于站点范围的设置)?

class which0,则将_添加到_基(“只能有一个”)
结束
结束

此行中是否只有一列?如果不是这样,那么通过迁移添加新列可能会有些过分。您至少可以使此表包含“name”和“value”列,并通过名称的唯一性进行验证。

在Rails 4中:

class Anything < ActiveRecord::Base
  before_create :only_one_row

  private
  def only_one_row
    false if Anything.count > 0
  end
end
class Anything0
结束
结束
那么,无声的错误是不好的

class Anything < ActiveRecord::Base
  before_create :only_one_row

  private
  def only_one_row
    raise "You can create only one row of this table" if Anything.count > 0
  end
end
class Anything0
结束
结束

这不是一个数据库,但您可以通过验证完成类似的任务。我不知道你为什么要这么做。你希望意外地插入额外的行吗?不,我只是想,如果我有一个数据库,它应该只包含站点的设置,我希望它只有一行,这也应该反映在代码中。当然,使用配置文件而不是数据库可能是个好主意-我决定使用这种方法,因为这样ActiveRecord就可以处理所有事情,我不需要存储配置文件的路径、打开/关闭文件、解决读/写权限问题等。如果你说的是可以在运行时配置的设置,那么是的,数据库可能是合适的。但是典型的Rails惯例是将配置存储在
config/
目录中,这就是它的用途。是的,可能是这样,但正如我在评论中所写的那样,我想利用AR的优势——我可以通过一次迁移添加所有列,我想这不是一件坏事。我不明白生成名称-值列如何解决我的问题-但Unixmonkey已经向我指出了解决方案一个补充:在Rails 3中,如果其他人想使用它,应该使用
。errors[:base]:这有一个缺点,即新的内容在保存后无效,您可以通过条件中的
| | Whatever.first==self
来修复它。对于来这里而不是“raise”的其他人,请使用以下命令:
错误。如果有任何错误,请添加(:base,“您只能创建此表的一行)。计数>0
class Anything < ActiveRecord::Base
  before_create :only_one_row

  private
  def only_one_row
    raise "You can create only one row of this table" if Anything.count > 0
  end
end