Ruby on Rails中的条件关联

时间:2017-09-22 11:33:45

标签: ruby-on-rails ruby ruby-on-rails-5

我有一个用户模型。我正在从事电子商务市场应用。我需要能够将用户从买家切换到卖家。如果用户想成为卖家,则存在另一个名为sellerinfo的表来填写他的卖家信息。我在Users表中有一个名为is_seller的列? 。因此,如果用户是卖家,那么我必须创建一个关联,以便我可以提供更多关于他的信息。可以从user.rb文件中执行此操作:

has_one :seller_info if user.is_seller?

我认为这不是Rails方式。请建议如何切换用户并存储他们的数据。

2 个答案:

答案 0 :(得分:1)

使用这样的代码,它允许您使用所有ActiveRecord association's benefits

此外,在创建/更新期间,您必须考虑:

  • 删除seller_info,如果用户移至买方类型。
  • 根据is_seller?
  • 使用不同的strong parameters

答案 1 :(得分:1)

你应该至少有三个表:

1 - 用户表,这里只是凭证

2 - 用户买家表(has_one association),用户的个人信息

2.1 - 如果您想让用户拥有多个送货地址,请解决用户买家(来自用户买家表的has_many或两个has_one关联)。

3 - 用户卖家表,卖家信息

对于用户的卖家表:

对于表的用户卖家,使用has_one关联和Optional设置为True(允许此关联具有空值)。还应考虑仅在用户填写所有预先要求时创建has_one关联。因此,仅存在想要在用户的卖家表中销售的用户。要查看该用户,卖家只需检查has_one是否存在。

关于标志user_seller:

您可以使用在用户表中创建的标志user_is_seller来跟踪用户的状态,前提是他是否处于卖家模式。如果是,那么您可以拥有仅适用于该状态的控制器(使用before_filters来过滤非卖家或未处于卖家模式的用户)。

这样,您可以在同一帐户中拥有卖家和买家的现有用户。