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