1

ユーザー認証を使用して単純な webapp を作成しました。Usersユーザー認証Details用と追加のユーザー詳細用の2 つのモデルを作成しました。それらは関係に関連付けられていone-to-oneます。同じコントローラから 2 つのモデルを更新する際に問題が発生しています。

この場合、関連付けはone-to-oneまったく推奨されますか (1 つのテーブルにあまりにも多くのフィールドを押し込むつもりはありません)、もしそうなら、1 つのコントローラーを介して 2 つのモデルを処理する適切な方法は何ですか?

4

2 に答える 2

3

ネストされたモデル フォーム パート 1/2をレール キャストで確認します。レールキャストをチェックアウトすると、きっと理解できます:)多対多の関係、マイナーなtweekについて説明されており、1対1で実行できます。

あなたが見たいと思うかもしれないいくつかのサンプルコード:

class Wiki < ActiveRecord::Base
  has_many :revisions 

  has_one :latest_revision, :class_name => "Revision", :order => 'updated_at desc', :limit => 1
  accepts_nested_attributes_for :revisions
end

class Revision < ActiveRecord::Base
  belongs_to :wiki
end


# new Wiki page, first revision
def new
  @wiki = Wiki.new
  @revision = @wiki.revisions.build
end

def create
  @wiki=Wiki.new(params[:wiki])
  @wiki.save
end

# adding a Revision to a Wiki page
def edit
  @wiki = Wiki.find(params[:id])
  @revision = @wiki.revisions.build # creating a new revision on edit
end

def update
  @wiki=Wiki.new(params[:wiki])
  @wiki.save
end

def show
  @wiki = Wiki.find(params[:id])
  @revision = @wiki.latest_revision
end
于 2012-03-19T23:09:58.630 に答える
-1

はい、物事を区分しておくためにあなたが言ったように、1対1の使用は正当化されました。モデルで適切に関連付けを定義している限り、コントローラーからそれらにアクセスできるはずです。

User モデルには以下が必要です。

has_one : detail

詳細モデルには以下が必要です。

belongs_to : user

次に、「詳細」テーブルに「user_id」という外部キーがある場合、すべてが正常に機能するはずです。

これで、次のように相互に使用して両方のモデルにアクセスできます

User.find(1).detail

また

Detail.find(1).user

両方のコントローラーから同じ方法で両方を更新できるようになりました。

于 2012-03-19T23:17:53.563 に答える