RailS4 - 親モデル属性に応じた子モデルの関連付け -- ruby-on-rails フィールド と ruby-on-rails-4 フィールド と model フィールド と has-one フィールド 関連 問題

Rails4 - Child model association depending on Parent model attribute












0
vote

問題

日本語

職業属性を持つユーザーモデルを持っています。 ユーザーが<コード> footballer または<コード> tennisman にすることができるとしましょう。 ユーザーが登録すると、彼は職業を選択し、後で変更することができます。

マイユーザモデルには、名前、アドレス、ウェイト、連絡先情報などが最も一般的な属性が含まれています。 jpaller_profile、tennissman_profiles

など、専用モデルで他の特定の属性を保存したいです。

単一のモデル構造では、特体が異なるため、多型を使用できません。

私のユーザーモデルに宣言する方法私の "user.ocupation"属性に応じて特定のhas_one条件を宣言できますか?

そしてそれは行くのに最適な方法ですか? あなたの助けをありがとう

英語

I have a User model that has an occupation attribute. Let's say a user can be a footballer or a tennisman When the user sign up, he selects the occupation, and can change it later.

My User model contains the most common attributes, like name, address, weight, contact infos. I want to store the other specific attributes in dedicated models, such as footballer_profile, tennissman_profiles

I can not use polymorphism since the infos are too different for a single model structure.

How can I declare to my User model a specific has_one condition depending on my "User.occupation" attribute ?

And is it the best way to go ? Thank you for your help

</div
           

回答リスト

2
 
vote
vote
ベストアンサー
 

あなたが書くことができます:

<事前> <コード> class User < ActiveRecord::Base enum occupation: [ :footballer, :tennissman ] self.occupations.each do |type| has_one type, -> { where occupation: type }, class_name: "#{type.classify}_profile" end #.. end

それがどのように機能するかを理解するために #enum にお読みください。あなたがの列挙のように、属性を宣言することにするだけで、の、のを覚えて、その属性は、<強い> の整数のの列でなければなりません。あなたがの列挙ので行くことにしたくない場合は、定数を使用します。

<事前> <コード> class User < ActiveRecord::Base Types = [ :footballer , :tennissman ] Types.each do |type| has_one type, -> { where occupation: type.to_s }, class_name: "#{type.classify}_profile" end #.. end
 

You can write :

class User < ActiveRecord::Base    enum occupation: [ :footballer, :tennissman ]    self.occupations.each do |type|      has_one type, -> { where occupation: type }, class_name: "#{type.classify}_profile"   end   #.. end 

Please read #enum to understand how it works. Just remember, while you will be declaring, an attribute as enum, that attribute must be an integer column. If you don't want to go with enum, use a constant.

class User < ActiveRecord::Base    Types = [ :footballer , :tennissman ]    Types.each do |type|      has_one type, -> { where occupation: type.to_s }, class_name: "#{type.classify}_profile"   end   #.. end 
</div
 
 
 
 
1
 
vote

私には多型のためのケースのように聞こえます。

<事前> <コード> class User < ActiveRecord::Base belongs_to :occupational_profile, polymorphic: true end class FootballerProfile < ActiveRecord::Base has_one :user, as: :occupational_profile end

この方法であなたは、単に彼らが選択した職業のプロファイルを構築し、関連付けることができます。

 

Sounds like a case for polymorphism to me.

class User < ActiveRecord::Base   belongs_to :occupational_profile, polymorphic: true end  class FootballerProfile < ActiveRecord::Base   has_one :user, as: :occupational_profile end 

This way you can simply build and associate the profile for the occupation they've chosen.

</div
 
 
         
         

関連する質問

7  未定義の方法 `更新? ' Rails 4のネストされた属性の場合は、HasoneasSociationの場合  ( Undefined method updated for hasoneassociation for nested attributes in rai ) 
だから私の問題は次のようなものです: https://gist.github.com/pansarin/4a221a09239271155584A このフォームを保存するとき、タイトルのようにエラーが発生します <事前> <コード> NoMethodE...

8  Mongoidを使用して、Railsでは、すべてのモデルが有効である(NILではない)has_one参照を見つけるにはどうすればよいですか。  ( In rails using mongoid how do i find all models with a valid not nil has one ) 
だから私はこのような2つのモデルを持っています <事前> <コード> class ModelParent include Mongoid::Document field :name, :type => String has_one :model_c...

0  CakePHPのメインテーブルに直接関連しない接合テーブル  ( Joining table not directly related to main table in cakephp ) 
私は構造が以下のものと似ている3つのテーブルを持っています: <事前> <コード> employees offices postings ________ ________ ___________ id id ...

1  Rails HAS_ONE VS has_many協会  ( Rails has one vs has many association ) 
モデルは Book とSay Title という名前の別のモデルです。関連付けは単に以下に定義されています。 <事前> <コード> class Book < ApplicationRecord has_one :title end class Ti...

1  外部キーを使用してレールシードデータを作成します  ( Creating rails seed data with foreign keys ) 
表示された外部キー制約に続くシードデータを作成しています。 メッセージを取得しています。 "未定義のメソッド 'create' for nil:nilclass" マイコマンド: <事前> <コード> rails g model user login:st...

2  HAS_ONE協会のチェックボックスでビルドを使用したレール  ( Rails using build with checkbox with has one association ) 
私はhas_oneプロファイルがユーザーにプロファイルが必要ではありません。私は、(更新または作成を介して)ユーザーフォームでチェックボックスがチェックされている場合にのみプロファイルを作成する方法を探しています。 私のモデルはこのように見えます - <...

0  Rails:非PK列に基づくHAS_ONE協会  ( Rails has one association based on non pk column ) 
次の表があります: <事前> <コード> users [id | name | type] types [id | title] <コード> has_one Association( 'users'.type =&gt;' types ''...

0  has_oneの関係、データベースがどのように見えますか?  ( Has one relation how database will looks ) 
私が持っていれば: <事前> <コード> class Person has_one :address end class Address belongs_to :person end Controller: def new @pers...

0  このRails協会のショートカットはなぜ失敗するのですか?正しい方法は何ですか?  ( Why does this rails association shortcut fail what is the correct way ) 
与えられたケースでは、ユーザーが: 多くの招待状(has_many:招待状) 1つの招待状を受け入れる(has_one:招待状) http://guides.rubyonRails.org/association_basics.a.r="notro...

0  RailsでHAS_ONEの関係を強制する  ( Enforce has one relationship in rails ) 
私は初めてhas_one協会を使ってrailsに慣れています。 ユーザモデル <事前> <コード> class User < ActiveRecord::Base has_one :shop_profile validates :user_id, presen...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有