1

私は Java 開発者で、ここ数日間 Rails を学んでいます。Rails に移植しようとしている Java EE アプリケーション (ORM に Hibernate を使用) があります。足場を使用して、いくつかのモデルを生成しました。しかし、他のモデルへの参照を含む他のモデルがあります。関係を定義するにはどうすればよいですか? 私もそれを足場にすることはできますか?

これが私がやろうとしていることの例です。

public class Engine {
    private int valves;
    private int capacity;
    private int rpm;
}

以下を実行するだけで、Ruby で Engine クラスをスキャフォールディングできます。

rails generate scaffold Engine valves:integer capacity:integer rpm:integer

ここに私にとってトリッキーな部分があります:

public class Car {
    private Engine engine;
}

RubyでCarクラスを足場にするにはどうすればよいですか?

4

4 に答える 4

3

私の理解が正しければ、あなたは協会を探しています。これはあなた が読むべき素晴らしいガイドです。ここで理解しておくべきことは、そのガイドで説明されている一連のメソッドを使用して、モデル内で相互にどのように関係するかを定義することです。

これが私があなたに提案することです:

rails generate scaffold Car <db columns>
rails generate model Engine valves:integer capacity:integer rpm:integer car_id:integer

あなたの2つのモデルで:

class Car < ActiveRecord::Base
  has_one :engine
end 

class Engine < ActiveRecord::Base
  belongs_to :car
end

実際には、両方のモデルの足場を生成できます...これにより、コントローラーとビューが作成されます。しかし、この場合、追加することは理にかなっているかもしれません

accepts_nested_attribues_for :engine

代わりにあなたの車のモデルに。これにより、コントローラからのエンジン モデルの操作と Car モデルのビューを管理できます。

いずれにせよ、これがあなたが必要なものを見つけ始めるのに役立つことを願っています.

于 2011-10-04T11:12:17.517 に答える
1

referencesこれは、activerecord migrationのヘルパーを使用して行うことができます。

rails generate scaffold Car engine:references ...

追加されます:

t.references :engine移行ファイルで

has_many :enginesあなたの車のモデルファイルで

belongs_to :car エンジン モデル ファイルで

Rails API のオプション (デフォルト、リレーション コールバック...) を確認することを忘れないでください (例: http://railsapi.com/doc/rails-v3.0.8rc1/ ) 。

于 2011-10-04T11:10:26.957 に答える
1

Rubyについてもっと学ぶべきです。Ruby は静的言語ではありません。つまり、すべての変数があらゆる種類のオブジェクトを保持できます。

rails generate コマンドは、valves:integer などをデータベース目的でのみ使用します。これは、データベースがこの情報を必要とするためです。

リレーションの問題に関しては、has_many、bleongs_to などについて読む必要があります ( http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.htmlを参照) Rails では、次のようにリレーションを定義します。

class Car
  belongs_to :engine
end

class Engine
  has_many :cars
end

さらに、外部キー engine_id を Car に追加する必要があります。

これは、Rails で使用されるいくつかの規則があるため機能します。

基本的なチュートリアルがなければ、先に進むことはできません。

于 2011-10-04T11:11:53.977 に答える
1

リレーションの足場はありません。「手で」行う方法を学ぶ必要があります (それほど難しくありません)。"Rails Guides"と、こちらの"Active Record Association"をご覧ください。

あなたの例では、次の手順を実行する必要があります。

  1. データベースを移行する移行を作成します。rails g migration AddIds
  2. 移行を変更して、必要な追加の ID を含めます。

    ...
    add_column :engines, :car_id, :integer
    
  3. 次のコードをモデルに追加します。

    class Car
      has_one :engine
      ...
    end
    class Engine
      belongs_to :car
      ...
    end
    
于 2011-10-04T11:13:15.300 に答える