Rails模型关联命名约定

时间:2018-01-29 07:27:33

标签: ruby-on-rails ruby activerecord model relationship

我有模特用户:

class User < ApplicationRecord
  has_many :selfies
  has_many :likes
  has_many :comments

还有自拍模型:

class Selfie < ApplicationRecord
  belongs_to :user
  has_many :likes, dependent: :destroy
  has_many :comments, dependent: :destroy

还有模特评论:

class Like < ApplicationRecord
  belongs_to :user
  belongs_to :selfie

在我的代码中,我通常可以像某个实例@user.comments.count一样使用,但我得到了数字,但是当我尝试使用@user.selfies.count时,我收到了错误

  

NameError:未初始化的常量User :: Selfy

我在这里做错了什么?我正在思考它的命名约定,但我尝试了一些组合,selfy selfys selfie ......

2 个答案:

答案 0 :(得分:3)

尝试使用rails控制台:

"selfies".singularize # -> "selfy"

因此,Rails检测到错误的模型类。你可以作为@guitarman的建议,但你使用selfies的任何地方都必须这样做。

另一种方法是在selfies的复数和单数之间创建地图。创建config/initializers/selfies_inflection.rb并添加地图:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'selfie', 'selfies'
end

答案 1 :(得分:2)

您需要将模型(以及表格,如果需要)重命名为Selfy,请查看Rails在幕后所做的示例:

$> bundle exec rails console
# convert to table name
"Selfy".tableize 
=> "selfies"
# singular
"selfies".singularize
=> "selfy"
# plural
"selfy".pluralize
=> "selfies"

您的AR模型必须是:

class Selfy < ApplicationRecord
end
class Like < ApplicationRecord
  belongs_to :user
  belongs_to :selfy
end
class User < ApplicationRecord
  has_many :selfies
end