わかりましたので、関係仕様がレールでどのように機能するかを理解したと思いましたが、これに1日苦労しています。
コンテキストによっては、車とモデル名 (Impala、Charger など) の 2 つのモデルがあります。ここで、車はモデル名のインスタンスであり、モデル名はモデル名とその他のモデル レベル属性のルックアップ テーブルにすぎません。管理者のみがモデル名を CRUD できるため、モデル名コントローラーは管理者名前空間内にネストされます。エンド ユーザーは、車のインスタンスを Cars モデルに追加できます。
したがって、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 の管理 CRUD はすべてうまく機能します。問題は車のビューにあります。次のような特定の車のモデル名を参照する必要があると思います。
<%= @car.admin_model_names.Model =>
しかし、私はエラーが発生します:
undefined method `admin_model_names' for #<Car:0x000001040e2478>
ModelNames モデルで attr_accessible を試しましたが、役に立ちませんでした。基になるデータが正しく参照されています。また、車とユーザーの間に HABTMT 関係があり、さまざまなエンティティ ビューから互いの属性を参照することで、すべて正常に機能しました。しかし、これを機能させることができませんでした。ネストされたリソースと管理者コントロールの継承が原因ですか?
私が見つけた唯一の参照方法は次のとおりです。
<%= Admin::ModelName.find(@car.admin_model_name_id).model %>
しかし、これは実際には、その属性を取得するにはコードが多すぎるようです (および検索の費用がかかります)。Railsの方法はありますか?
前もって感謝します。
スコット