0

私はレールに比較的慣れておらず、データベース操作にも非常に慣れていません。

データベース内に多数のカスタム オブジェクトを含むクラスを作成しようとしています。これらのカスタム オブジェクトも、データベースの別のテーブルに格納されます。私はこれを次のように設定することができました

class MyClass < ActiveRecord::Base
  has_many :other_objects, :dependent => destroy
end

class OtherObject < ActiveRecord::Base
  belongs_to :my_class
  attr_accessible :some_stuff...
end

適切なデータベース テーブルを作成し、それを機能させることができました。

今、私がやりたいことは、クラスに「OtherObject」の特定のインスタンス (4 つ) を用意することです。これには、次のような簡単な識別子でアクセスできます。

test = MyClass.new
...
test.instance_of_other_object.some_attribute = "blahblah"

これにより、関連付けられたオブジェクトのデータベース エントリが更新されます。これについて最善の方法は何ですか?

4

3 に答える 3

0

object.dupレール3.1以降に今すぐ使用してください。

a = MyClass.first # finds the first instance of the model "MyClass"  

b = a.dup # duplicates the record.

c = a.dup # duplicates the record again.  

b.field_name = "blahblah"

c.fielf_name = "blahblah"

b.save # saves the record into the database for object b.

c.save # saves the record into the database for object c.

データベースを調べると、新しいレコードが作成されていることがわかります。新しいIDを持つことを除いて、最初のレコードと同じです。

詳細については、[モデルの複製]もオンにしてください。

于 2013-02-18T14:50:53.593 に答える
0

これは完全な答えではありませんが、オブジェクトの取得には機能するが、設定には機能しないものを思いつきました。

class MyClass < ActiveRecord::Base
  has_many :other_objects, :dependent => destroy

  def particular_instance
    return OtherObject.find_by_id(self.particular_instance_id)
  end
end

私のdbスキーマは次のようになります

create_table "my_classs", :force => true do |t|
  t.integer "particular_instance_id"
end

create_table "other_objects", :force => true do |t|
  t.integer "my_class_id"
  t.string "some_attribute"
end

更新 other_object クラスの属性を設定するには、update_attributes メソッドを使用できます。

my_class.particular_instance.update_attributes(:some_attribute => "blah")
于 2013-02-18T12:04:32.270 に答える