6

あなたがこの構造を持っているとしましょう:

class House < ActiveRecord::Base
  has_many :rooms
  accepts_nested_attributes_for :rooms
  attr_accessible :rooms_attributes
end

class Room < ActiveRecord::Base 
  has_one :tv
  accepts_nested_attributes_for :tv
  attr_accessible :tv_attributes
end

class Tv 
  belongs_to :user
  attr_accessible :manufacturer
  validates_presence_of :user
end

Tvのユーザーは意図的にアクセスできないことに注意してください。つまり、家、部屋、テレビを1ページで入力できるトリプルネストフォームがあります。

コントローラのcreateメソッドは次のとおりです。

def create
  @house = House.new(params[:house])

  if @house.save
    # ... standard stuff
  else
    # ... standard stuff
  end
end

質問:世界でどのようにuser_id各テレビにデータを入力しますか(current_user.idから取得する必要があります)?良い習慣は何ですか?

これが私がこれで見るcatch22です。

  1. ハッシュuser_idsに直接入力しparamsます(かなり深くネストされています)
    • user_ids一括割り当てできないため、保存は失敗します
  2. #saveが終了した後、すべてのテレビのユーザーにデータを入力します
    • user_id存在する必要があるため、保存は失敗します
    • 上記をバイパスしても、テレビはしばらくの間IDなしになります-吸う

これを行うための適切な方法はありますか?

4

1 に答える 1

2

これで何か問題がありますか?

def create
  @house = House.new(params[:house])
  @house.rooms.map {|room| room.tv }.each {|tv| tv.user = current_user }
  if @house.save
    # ... standard stuff
  else
    # ... standard stuff
  end
end

私はこれを試していませんが、保存していなくても、この時点でオブジェクトを作成してアクセスできるようにする必要があるようです。

于 2009-08-14T02:19:45.880 に答える