Ruby on rails 3 通过嵌套的名称空间引用模型中的属性,这些属性属于关系

Ruby on rails 3 通过嵌套的名称空间引用模型中的属性,这些属性属于关系,ruby-on-rails-3,belongs-to,Ruby On Rails 3,Belongs To,好的,我想我理解了rails中的关系规范是如何工作的,但我已经为此挣扎了一天了 在某些上下文中,我有两个模型汽车&模型名称(例如Impala、Charger等),其中汽车是模型名称的实例,而模型名称实际上只是模型名称和其他一些模型级属性的查找表。模型名控制器嵌套在管理员命名空间中,因为只有管理员可以CRUD模型名。最终用户可以将汽车实例添加到汽车模型中 因此,在routes.rb中,我有: resources :cars namespace :admin do resources :m

好的,我想我理解了rails中的关系规范是如何工作的,但我已经为此挣扎了一天了

在某些上下文中,我有两个模型汽车&模型名称(例如Impala、Charger等),其中汽车是模型名称的实例,而模型名称实际上只是模型名称和其他一些模型级属性的查找表。模型名控制器嵌套在管理员命名空间中,因为只有管理员可以CRUD模型名。最终用户可以将汽车实例添加到汽车模型中

因此,在routes.rb中,我有:

  resources :cars

  namespace :admin do resources :model_names end
模型的定义如下:

class Admin::ModelName < ActiveRecord::Base
end
class Car < ActiveRecord::Base
  belongs_to :admin_model_name
end
class Admin::ModelName
迁移包括:

class CreateCars < ActiveRecord::Migration
  def self.up
    create_table :cars do |t|
      t.string :chassis_number
      t.string :description
      t.references :admin_model_name
      t.timestamps
   end
end

class CreateAdminModelNames < ActiveRecord::Migration
  def self.up
    create_table :admin_model_names do |t|
      t.string :model
      t.integer :sort_index
      #...additional attributes removed
      t.timestamps
    end
class CreateCars
ModelName的管理CRUD都工作得很好。问题出在汽车视图上。我想我应该引用一个特定的车型名称,比如:

<%= @car.admin_model_names.Model =>

但我得到了一个错误:

undefined method `admin_model_names' for #<Car:0x000001040e2478>
未定义的方法“admin\u model\u names”#
我在ModelNames模型上尝试了attr_,但没有成功。基础数据被正确引用。我还拥有汽车和用户之间的HABTMT关系,所有这些都可以很好地从不同的实体视图中引用彼此的属性。但我一直没能让它起作用。这是由于嵌套的资源和管理控制继承造成的吗

我发现唯一有效的参考方法是:

 <%= Admin::ModelName.find(@car.admin_model_name_id).model %>

但这似乎真的是太多的代码(以及查找的开销)而无法获得该属性。有铁路吗

提前谢谢

斯科特,你试过了吗

class Car < ActiveRecord::Base
  belongs_to :admin_model_name, :class_name => 'Admin::ModelName'
end
class-Car'admin::ModelName'
结束
如有必要,添加:foreign_key=>''并将此列添加到cars表中

您是否尝试过:

class Car < ActiveRecord::Base   
  belongs_to :admin_model_name, :class_name => "Admin::ModelName" 
end
class-Car“admin::ModelName”
结束
如中所述

第3.4节

您可能还需要设置:foreign\u key=>“admin\u model\u name\u id”属性来指定引用模型

:foreign_key => "admin_model_name_id"
希望能有所帮助。

我无法发表评论…所以这实际上是我没有假装回答…但我看到的是你的@car不应该用单数称呼“admin\u model\u name”…是的,你是对的。我尝试了多个变体,并粘贴了其中一个“让我们看看这是否有效”的代码。使用单数形式,就像我得到未初始化的常量Car::AdminModelName一样