2

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

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

  • 我该如何加入?我试过 User.joins(:user_has_messages) 很伤心:(

问题:

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

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

4

3 回答 3

4

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

class OtherClass < ActiveRecord::Base
  has_many :user_has_messages, :class_name => 'UserHasMessages'
end
于 2011-03-31T07:38:06.483 回答
3

您可以添加一个新的迁移

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.rbuser_message.rb,并将您的类从 重命名UserHasMessagesUserMessage

完毕 :)

于 2011-03-31T10:15:55.560 回答
2

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

User has many messages through user_messages

你会得到像 current_user.messages 这样的用户消息。

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

于 2011-03-31T08:31:58.037 回答