gpt4 book ai didi

ruby-on-rails-3 - 通过嵌套 namespace 引用具有belongs_to关系的模型中的属性

转载 作者:行者123 更新时间:2023-12-04 06:58:24 26 4
gpt4 key购买 nike

好的,所以我想我了解关系规范如何在Rails中工作,但是我已经为此苦了一天。

在某些情况下,我有两个模型Cars&Model Names(例如Impala,Charger等),其中Cars是Model Names的实例,而Model Names实际上不过是Model Names和其他模型级别属性的查找表。 Model Name Controller 嵌套在admin namespace 中,因为只有管理员才能CRUD Model Names。最终用户可以将汽车实例添加到“汽车”模型中。

因此,在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 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

ModelName的admin CRUD都可以很好地工作。问题出在“汽车” View 中。我认为我应该引用特定的汽车型号名称,例如:
<%= @car.admin_model_names.Model =>

但是我得到了错误:
undefined method `admin_model_names' for #<Car:0x000001040e2478>

我已经在ModelNames模型上尝试过attr_accessible,但无济于事。正确引用了基础数据。我在“汽车与用户”之间也具有HABTMT关系,并且在从不同实体 View 中互相引用彼此的属性时,它们都能正常工作。但是尚未能够使它正常工作。是由于嵌套的资源和管理控件继承引起的吗?

我发现唯一可行的引用方法是:
 <%= Admin::ModelName.find(@car.admin_model_name_id).model %>

但这似乎真的要花费太多代码(以及查找的开销)才能到达该属性。有Rails的方法吗?

提前致谢。

史考特

最佳答案

你有没有尝试过:

class Car < ActiveRecord::Base   
belongs_to :admin_model_name, :class_name => "Admin::ModelName"
end

如中所述

http://guides.rubyonrails.org/association_basics.html

第3.4节?

您可能还需要设置:foreign_key =>“admin_model_name_id”属性以指定引用模型。

希望能帮助到你。

关于ruby-on-rails-3 - 通过嵌套 namespace 引用具有belongs_to关系的模型中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4597089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com