【问题标题】:What should I do if I named a Model in Rails 3 plural?如果我在 Rails 3 中为模型命名复数,我该怎么办?
【发布时间】:2011-03-31 06:58:30
【问题描述】:

我根据一些 SO 帖子创建了一个名为 UserHasMessages 的模型。我认为这似乎给我带来了一些挑战:

  • 如何使用has_many 引用它?我应该使用 has_many :user_has_messageses 吗?

  • 如何进行联接?我试过 User.joins(:user_has_messages) 很伤心:(

问题:

我应该以某种方式将名称更改为 UserHasMessage,如果可以,如何?

如果我保持复数,我该如何处理这些情况?

【问题讨论】:

    标签: ruby-on-rails model associations has-many plural


    【解决方案1】:

    您可以使用与旧表相同的语法:

    class OtherClass < ActiveRecord::Base
      has_many :user_has_messages, :class_name => 'UserHasMessages'
    end
    

    【讨论】:

      【解决方案2】:

      你可以添加一个新的迁移

      rails g migration rename_user_has_messages
      

      你在里面写:

      class RenameUserHasMessages < ActiveRecord::Migration
        def self.up
          rename_table :user_has_messages, :user_messages
        end
      
        def self.down
          rename_table :user_messages, :user_has_messages
        end
      end
      

      (表格总是复数)

      运行迁移。

      将你的文件从user_has_messages.rb重命名为user_message.rb,并将你的类从UserHasMessages重命名为UserMessage

      完成:)

      【讨论】:

        【解决方案3】:

        避免使用以 S 结尾的类名,就像魔鬼避免使用圣水一样。 UserHasMessages 这个名字是一个非常糟糕的选择。您不会创建数据库表来检查某些内容。相反,您有一个 User 模型、一个 Message 模型和一个 UserMessage 模型。然后,如果要检查用户消息,只需创建一个方法即可。关联应该是:

        User has many messages through user_messages
        

        您会收到类似 current_user.messages 的用户消息。

        我强烈建议您将设计更改为我描述的设计:)

        【讨论】:

        • @SpyrosP...顺便说一句,这有助于解决我一直遇到的 :joins 问题吗?
        • 肯定的。如果您这样做,则不需要加入,因为 activerecord 会自动为您完成。
        • 我不会说避免类名以 S 结尾,但请避免使用复数名称。
        猜你喜欢
        • 2020-04-14
        • 2022-07-25
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 2017-05-10
        • 2019-07-31
        相关资源
        最近更新 更多