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

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

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

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1405閲覧

Rails5での多対多の実装

TsubasaRyuto

総合スコア6

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/04/02 08:26

###前提・実現したいこと
userとuser_profileというモデルを作成しい1対1の関係性を作り、
user_profileに特技(user_skill)を追加するためにuser_skillとuser_profileとの関係を多対多にする。

userはあらかじめ、アカウント登録時に作成されるとする。この時にuser_profileは登録しない。

user_profileは別のcontrollersのクラスで作成できるようにし、user_profileの登録と同時にuser_skillも登録できるようにしたい。

###該当のソースコード

model class User has_one :profile, foreign_key: 'id', class_name: 'UserProfile' class UserProfile has_many :user_skills, dependent: :destroy has_many :skills, through: :user_skills accepts_nested_attributes_for :skills, allow_destroy: true, limit: 10 belongs_to :user, foreign_key: 'id' self.table_name = 'worker_profiles' self.primary_key = :id belongs_to :worker, foreign_key: 'id' before_create { self.id = self.worker.id } class UserSkill belongs_to :user_profile, optional: true belongs_to :skill class Skill has_many :user_skills has_many :user_profiles, through: :user_skill
controller def new @user = current_user if @user && @user.activated? @user_profile = @user.build_profile else redirect_to root_url end end def create @user = current_user @user_profile = @user.build_profile(profile_params) if @user_profile.save flash[:success] = 'プロフィールを作成しました' redirect_to worker_path(username: @user.username) else render :new end end private def profile_params params.require(:worker_profile).permit( :プロフィール登録情報, { :skill_ids => [] } ) end # :プロフィール登録情報には画像や性別等の情報が入ります。

試した事

skill_idsの情報がないときは、user_profileは登録できます。

困っている事

profile_paramsには登録する情報が帰ってきているが、saveをするとfalseになってしまう。

user_skillの情報もbinding.pryを挟み
@user_profile.skillsとすると、

id: nil, user_profile_id: nil, skill_id: 1, created_at: nil, updated_at: nil>, id: nil, user_profile_id: nil, skill_id: 2, created_at: nil, updated_at: nil>, id: nil, user_profile_id: nil, skill_id: 3, created_at: nil, updated_at: nil>, id: nil, user_profile_id: nil, skill_id: 4, created_at: nil, updated_at: nil>, id: nil, user_profile_id: nil, skill_id: 5, created_at: nil, updated_at: nil>

以上の情報がかえってきます。

しかし、@user_profile.saveをするとfalseになってしまいます。

どなたか誤解とうよろしくお願いいたします。

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

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

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

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

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

moke

2017/04/03 04:05

viewを見ないとなんとも言えません new.html.erb及びあれば_form.html.erbを見せてください、さらに@user_profile.saveを@user_profile.save!に変えてエラーメッセジを表示させ追記してください
TsubasaRyuto

2017/04/03 22:04

@mokeさんリアクションしていただきありがとうございます。 しかし、モデルのリレーションを変えることで解決することができました。
moke

2017/04/04 00:12

おお、良かったです。terateil的には、自己解決にして解決方法を記述することを期待しているらしいですが、私も、する必要ないと思いますけどね…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問