0

Rails 4.1.0.beta で単純な多対 1 の関係を作成しました

アイテム.rb

class Item < ActiveRecord::Base
  belongs_to :owner, :class_name => "User"
  belongs_to :category
  has_many :sales
  accepts_nested_attributes_for :sales
  validates_presence_of :category, :owner, :name, :description
end

セール.rb

class Sale < ActiveRecord::Base
  belongs_to :item
  belongs_to :seller, :class_name => "User"
  has_many :bids
  validates_presence_of :item, :seller
end

これらは、schema.rb に従ったデータベース内の関連テーブルです。

  create_table "items", force: true do |t|
    t.integer  "owner_id"
    t.integer  "category_id"
    t.string   "name"
    t.string   "description"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
  create_table "sales", force: true do |t|
    t.integer  "item_id"
    t.integer  "seller_id"
    t.integer  "buy_it_now"
    t.boolean  "bidding_enabled"
    t.integer  "minimum_starting_bid"
    t.string   "currency"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

次のようにアイテム内にネストされたセールを作成しようとすると、レールコンソールで:

> params = {"item"=>{"owner_id"=>"3", "category_id"=>"1", "name"=>"fawkin item", "description"=>"blarg", "sales_attributes"=>{"0"=>{"seller_id"=>"3", "buy_it_now"=>"5", "bidding_enabled"=>"0", "minimum_starting_bid"=>"", "currency"=>"btc"}}}}
> item = Item.new(params["item"])
> item.sales.first

item.sales 内の結果の販売エントリには、item_id がありません。

#<Sale id: nil, item_id: nil, seller_id: 3, buy_it_now: 5, bidding_enabled: false, minimum_starting_bid: nil, currency: "btc", created_at: nil, updated_at: nil>

アイテムを保存しようとすると、トランザクションはロールバックします。

> item.save
> item.errors
#<ActiveModel::Errors:0x000000013bfc58 @base=#<Item id: nil, owner_id: 3, category_id: 1, name: "fawkin item", description: "blarg", created_at: nil, updated_at: nil>, @messages={:"sales.item"=>["can't be blank"]}>
4

2 に答える 2

0

売上はアイテム次第。最初にアイテムが存在しないと、販売記録を作成できません。これは 2 段階のプロセスです。そのような 1 つのメソッド呼び出しですべてをひとまとめにすることはできません。

于 2013-09-06T08:50:33.887 に答える
0

ネストされた属性を持つ単純なアプリケーションを1つ作成しました。ネストされた属性の例で利用可能なコードを調べてください

于 2013-09-06T14:13:05.593 に答える