2016-03-22 15 views
0

私はResident.Iのroll_number属性からユーザーを作成したい常駐モデルにレールで関連モデルからオブジェクトを作成する方法は?

class Resident < ActiveRecord::Base 
     has_one :user 
end 

とUserモデル

class User < ActiveRecord::Base 
    belongs_to :resident 
end 

を持っているユーザーのためのいくつかの値を要求するフォームを持っていますroll_numberフィールドを含み、ロール番号がResidentsテーブルのroll_number属性と一致する場合、Userオブジェクトが作成されます。

我々はすでに住民admin.Nowで追加された私達のデータベースにある(ホステルに存在するがroll_numbersを持つ学生のリスト)を持っている私たちのサインアップフォームを使用して、我々のアプリケーションでは、学生の購読申し込みは、フォームは電子メールのみ、パスワードを要求する場合とロール番号。 roll_numberが既存の常駐テーブルのroll_numberに一致する場合、ユーザーは作成されます。ユーザーテーブルの

属性

ID:自動生成さ

roll_number:文字列

メール:文字列

パスワード:文字列

resident_id:常駐テーブル

からの参照常駐テーブルのの

属性

ID:自動生成さ

roll_number:文字列

名:文字列

答えて

0

あなたは行うことができますあなたがチェックする必要があり、この

def create 
    resident = Resident.find_by(roll_number: user_params[:roll_number]) 
    if resident.present? 
    @user = resident.create_user(user_params) 
    if @user.save 
     @user.send_activation_email 
     UserMailer.account_activation(@user).deliver_now 
     flash[:info] = "Please check your email to activate your account." 
     redirect_to root_url 
    else 
     render 'new' 
    end 
    else 
    flash[:info] = "Please enter a correct roll number." 
    redirect_to root_path 
    end 
end 

にアクセスする方法paramsの価値は、あなたのフォームがどのように見えるか分からないので、私はそれを理解できません。また、roll_numberが一致しない場合は、ケースを処理する必要があります。

希望に役立ちます!あなたが居住用ロール番号のため&検証をチェックして、がUserController#でユーザーを作成することができますuser.rb

before_create :match_resident 

def match_resident 
    resident = Resident.find_by(roll_number: self.roll_number) 
    if resident.blank? 
    raise "Invalid roll number" 
    end 
end 
+0

フィールドを持つユーザ登録のための登録ページがありますロール番号、電子メール、パスワード、パスワードの形式。 ユーザーが詳細を入力するときに、ロール番号が常駐テーブルに存在するかどうかを確認する必要があります。存在する場合は、居住者..bczに従ってユーザーを作成します。 あなたが提供した解決策は、居住者の居住者IDを持つ居住者を探していますが、サインアップ時に居住者IDを与えていないというエラーbczを示しています。 –

+0

は、フォームとコントローラのコード – RSB

+0

ユーザコントローラを貼り付けることができroll_number彼が常駐モデルに関連してサインアップの時に私たちに与えていることである。 https://justpaste.it/shjl サインアップページ:httpsを ://justpaste.it/shjn –

0

は次のようにメソッドを作成します。

def create 
    resident = Resident.find_by(params[:user][:roll_number]) 
    if resident.present? 
     @user = resident.create_user(roll_number: resident.roll_number) 
     if @user.save 
     # Handle a successful save. 
     @user.send_activation_email 
     UserMailer.account_activation(@user).deliver_now 
     flash[:info] = "Please check your email to activate your account." 
     redirect_to root_url 
     else 
     render 'new' 
     end 
    end 
    end 
0

+0

次に、ユーザーテーブルにresident_idを追加するのはどうですか...両方のモデルが互いにどのように関連しているのですか? –

+0

resident.user.newを実行すると、常駐オブジェクトからresident_id autoが追加されます。 –

+0

@Nischaynamdevあなたの提供したjustPasteリンクに従って自分の答えを編集しました。自分のuserscontroller#メソッドを自分のコードのメソッドで置き換えることができます。完全に動作します。 –

関連する問題