Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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 从复选框集合中存储用户首选项_Ruby On Rails_Preferences - Fatal编程技术网

Ruby on rails 从复选框集合中存储用户首选项

Ruby on rails 从复选框集合中存储用户首选项,ruby-on-rails,preferences,Ruby On Rails,Preferences,我有一个名称复选框集合,用户可以选择多个 我想保存用户选择,以便下次登录时使用 但是,随着时间的推移,一些名称可能会被删除,而新名称可能会被添加。添加的名称可以保持未选中状态,但我不想继续存储已删除名称的ID 那么我该怎么做呢?我会为您的选项创建一个表,然后创建一个记录选中选项的联接表 然后可以在选项端向关系添加:dependent=>:destroy。这将在删除该选项时删除联接表中的记录 以下是多对多的示例: def User < ActiveRecord::Base has_ma

我有一个名称复选框集合,用户可以选择多个

我想保存用户选择,以便下次登录时使用

但是,随着时间的推移,一些名称可能会被删除,而新名称可能会被添加。添加的名称可以保持未选中状态,但我不想继续存储已删除名称的ID


那么我该怎么做呢?

我会为您的选项创建一个表,然后创建一个记录选中选项的联接表

然后可以在选项端向关系添加:dependent=>:destroy。这将在删除该选项时删除联接表中的记录

以下是多对多的示例:

def User < ActiveRecord::Base
   has_many :preferences, :dependent=>:destroy
   has_many :options, :through=>:preferences
end

def Preferences < ActiveRecord::Base
    belongs_to :user
    belongs_to :option
end

def Option < ActiveRecord::Base
    has_many :preferences, :dependent=>:destroy
    has_many :users, :through=>:preferences
end
def User:销毁
有许多:选项,:至=>:首选项
终止
def首选项:销毁
拥有多个:用户,:至=>:首选项
终止

如果需要,可以为不同类型的选项创建多个联接表。比如说,对于背景色,您需要一个连接,它允许您也将颜色与关联一起存储,或者对于分页,您需要为页面上的文章存储一个整数,这可能是另一个模型。或者,您可以只向联接表中添加一个字符串值,并将相关数据存储为字符串,然后仅使用该字符串

这是一个很好的建议,但是这不需要一个新表来存储这个偏好吗?我本来希望有一个存储所有首选项的表,但似乎可以为各种首选项添加一个新表,但可能就是这样。不,您有一个表,每个首选项都作为记录,然后是一个从用户到首选项的联接表。您可以通过向“首选项”表中添加一行来添加新的首选项,若要将新的首选项标记为用户的活动,您可以向“联接”表中添加一条记录。如果“我的表”中存储了多个首选项,但其中一个(或多个)首选项是“有多个”,这是如何工作的?假设我正在存储一组最初提到的名称,以及用户选择的背景颜色。如果某些首选项是一对多,那么该表和join会是什么样子?id、帐户id、背景颜色、名称选择(但可以选择许多名称,而不仅仅是一个),因此我不确定您建议的一对多方法在这里会起到什么作用)这与您在问题中所述的用户可以选择多个复选框的列表不同。我所描述的不是一对多,这是一个多对多的过程。当您有一个连接表来存储关联时,您正在创建一个多对多的连接表。有关更多信息,请参阅我更新的示例。