9

わかりましたので、関係仕様がレールでどのように機能するかを理解したと思いましたが、これに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の方法はありますか?

前もって感謝します。

スコット

4

2 に答える 2

4

試しましたか

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

必要に応じて:foreign_key =>''を追加し、この列を車のテーブルに追加します。

于 2011-10-02T19:36:48.190 に答える