質問: railsを使ってwebアプリケーションの開発をしています。 今回2つのテーブルにおけるレコードの紐づけにつきまして分からずアドバイスを頂きたいです。 以下のテーブルは例なのですが、 ・classテーブルとnameテーブルを作成 ・classテーブルにはid,first,lastの3つフィールド ・nameテーブルにはidフィールド 2つのテーブルの関連付けは出来ている ・(class.rb) has_many :name ・(name.rb) belongs_to :class 上記を前提に、nameテーブルにfull_nameというフィールドを作成 そこでfull_nameにclassテーブルのfirst,lastを結合したレコードを挿入したいです。 (first + last) → (full_name) この作成ができずrailsではどの様に作成するかアドバイスをお願いします。
回答: full_nameフィールドをDBに追加してあり、そこにfirstとlastを結合した値を格納したい、という要求だとのコメントがあったので、それに合わせた方法を書きます。 基本的に、before_saveフィルタでfirstとlastをくっつけてfull_nameに格納し、保存する、という方法が一般的ではないかと思います。 ``` class Name < ActiveRecord::Base belongs_to :class attr_accessor :first, :last, :full_name before_save :set_full_name def set_full_name self.full_name = self.first.to_s + self.last.to_s end end ``` まあ、仕様の問題なのであまり深くは言いませんが、firstとlastがあるのに、わざわざくっつけたfull_nameをDBに保存するのはあまり筋が良くない気がします。 文化圏によって、姓->名の順か、名->姓の順か異なったり、姓と名の区切りの文字を途中で替えたくなったりした時に、full_nameフィールドの値を全部書き直す必要が出てきちゃったりするので。