質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

2回答

296閲覧

SinatraでActiveRecordを用いてアソシエーション

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2017/08/18 03:59

SinatraでAPI開発をしているのですが、ActiveRecordのアソシエーションがうまくいきません。

class User < ActiveRecord::Base has_many :posts end class Post < ActiveRecord::Base belongs_to :user end

で行った時に

@user = User.new @post = @user.post.new //ここでエラーがでる

これではうまく行かないのでしょうか。
よろしくお願いいたします。

なぜか

user = User.new post = Post.new user.post = post

はうまくいきます、、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Newをしたときにpostも更新したいということで

rails

1@post = @user.post.new

とされているのでしょうか?
だとすればnewでは

rails

1@user = User.new 2@user.posts.build

userテーブルが更新されたと同時にpostも更新したいのだとすると、
モデルも以下のように修正する必要があります。

rails

1class User < ActiveRecord::Base 2 has_many :posts, autosave: false 3end

いかがでしょう?

投稿2017/08/18 04:41

zooiiooz

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/23 05:29

なぜか ``` @user.posts.build ``` ではうまくいかないのですが、何か原因がありますか?
zooiiooz

2017/08/24 01:23 編集

rails cで @user = User.new;@user.posts.build とするとどんなエラーが出ますか?
退会済みユーザー

退会済みユーザー

2017/08/28 16:17

`NoMethodError - undefined method `posts' for `と出ます。どのようにしたらいいのでしょうか?
zooiiooz

2017/08/29 02:33

NoMethodErrorはuserモデルにhas_many :postsが書いて無い場合に出ます。確認ですが、models/user.rbにhas_many :postsの記載はありますよね?
guest

0

@post = @user.posts.build

buildnewでもよいですが、buildの方が一般的です。

投稿2017/08/18 04:34

suzukis

総合スコア1449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/18 10:32

`build`と`new`の違いはわかりました。 これはあらかじめ外部キーをmysqlで設定しておく必要がありますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問