2011-03-31 47 views
2

我基于SO帖子创建了一个名为UserHasMessages的模型。我认为这似乎给我带来了一些挑战:如果我用Rails 3复数命名模型,该怎么办?

  • 我如何参考has_many?我应该使用has_many :user_has_messageses

  • 我该如何做连接?我曾尝试User.joins(:user_has_messages),这是可悲的:(

问:

我应该以某种方式将名称更改为UserHasMessage,如果是这样,怎么

?如果我继续为复数,我该如何处理这些案件

回答

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.rb重命名为user_message.rb,并将您的文件从UserHasMessages重命名为UserMessage

完成:)

+0

啊,好吧,甜蜜,谢谢你的一步一步来 – Angela 2011-04-01 03:39:03

4

你可以用你的遗留表使用相同的语法:

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

感谢,这与我们的数据库遗留下来的帮助! – Simonini 2013-04-12 14:52:58

2

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

User has many messages through user_messages 

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

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

+0

我该怎么做? – Angela 2011-04-01 03:38:35

+0

@SpyrosP ...顺便说一句,这将有助于解决:我一直有的连接问题? – Angela 2011-04-01 04:11:47

+0

绝对。如果你这样做,你不需要加入,因为activerecord会自动为你做。 – Spyros 2011-04-01 04:48:45

相关问题