[解決済み] Rails 3 のビルドと新規作成
質問
Rails 3では
ドキュメント
では
build
メソッドは、アソシエーションのための
new
メソッドと同じで、外部キーが自動的に割り当てられると説明されています。ドキュメントからそのまま引用します。
Firm#clients.build (similar to Client.new("firm_id" => id))
他のところでも似たようなことを読んだことがあります。
しかし、私が
new
(例えば
some_firm.clients.new
をパラメータ無しで実行した場合)、 新しいクライアントの
firm_id
の関連付けを行います。
は
が自動的に作成されます。今、コンソールで結果を見つめていますよ。
私は何かを見逃しているのでしょうか?ドキュメントが少し古くなっている (可能性は低い) のでしょうか? の違いは何ですか?
build
と
new
?
どのように解決するのですか?
ドキュメントを少し読み間違えています。
some_firm.client.new
は新しい
Client
オブジェクトを作成するので、自動的に
firm_id
を
some_firm.id
を呼び出しているのに対し、docsでは
Client.new
を呼び出しており、これはファームの ID を全く知らないため、ファームの ID のために
firm_id
が渡される必要があります。
の唯一の違いは
some_firm.clients.new
と
some_firm.clients.build
は、どうやら
build
は、新しく作成されたクライアントを
clients
コレクションに追加します。
henrym:~/testapp$ rails c
Loading development environment (Rails 3.0.4)
r:001 > (some_firm = Firm.new).save # Create and save a new Firm
#=> true
r:002 > some_firm.clients # No clients yet
#=> []
r:003 > some_firm.clients.new # Create a new client
#=> #<Client id: nil, firm_id: 1, created_at: nil, updated_at: nil>
r:004 > some_firm.clients # Still no clients
#=> []
r:005 > some_firm.clients.build # Create a new client with build
#=> #<Client id: nil, firm_id: 1, created_at: nil, updated_at: nil>
r:006 > some_firm.clients # New client is added to clients
#=> [#<Client id: nil, firm_id: 1, created_at: nil, updated_at: nil>]
r:007 > some_firm.save
#=> true
r:008 > some_firm.clients # Saving firm also saves the attached client
#=> [#<Client id: 1, firm_id: 1, created_at: "2011-02-11 00:18:47",
updated_at: "2011-02-11 00:18:47">]
アソシエーションを介してオブジェクトを作成する場合。
build
よりも優先されるべきです。
new
の方が望ましいでしょう。
some_firm
(この場合) を、オブジェクトがデータベースに保存される前であっても、一貫した状態で維持します。
関連
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] Ruby on Railsのデータベースをパージまたは再作成する
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] エラーが発生しました。pgsqlをrailsで動作させようとすると、Peer authentication failed for user "postgres" と表示されます。
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み] Rails DBの移行 - テーブルを削除するには?
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】Rails: モデルがすでに存在するときに`rails generate scaffold`を実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】OS X Yosemite 10.10.5 で [Ruby on Rails] 5 をインストールすると extconf が失敗して終了コード 1 エラーになる。
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] Railsです。gemを使った特定バージョンのライブラリのアンインストール
-
[解決済み] railsでhidden fieldタグを使用する方法
-
[解決済み] RoRにおけるSpringサーバーの機能とは?
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController
-
[解決済み] 未初期化の定数 "コントローラ名"
-
[解決済み] .build、.create、.createの違い!どんな時に使うべき?