試圖使其創建時,根據用戶是選擇學生還是公司來創建用戶,Rails會爲該用戶創建學生配置文件或公司配置文件。Rails - 多態協會創建不同配置文件
我試圖使用多態關聯進行設置,但無法弄清楚如何根據視圖中選擇的內容在模型層生成配置文件。
模式
class User < ActiveRecord::Base
has_secure_password
has_one :student_profile, dependent: :destroy
has_one :corporate_profile, dependent: :destroy
has_many :searches, dependent: :destroy
#attr_accessor :profile_type - removed due to Rails 4, pushed strong params in controller
before_create :create_profile
def create_profile
if profile_type == 1
build_student_profile
else
build_corporate_profile
end
end
end
學生和企業簡介
class CorporateProfile < ActiveRecord::Base # or possibly inherit from ActiveRecord::Base if not using inheritance
belongs_to :user
end
class StudentProfile < ActiveRecord::Base # or possibly inherit from ActiveRecord::Base if not using inheritance
belongs_to :user
end
查看
這裏我有兩個單選按鈕來決定哪些用戶類型的註冊表單
個<%= bootstrap_form_for(@user) do |f| %>
<div class="field">
<%= f.form_group :gender, label: { text: "Gender" }, help: "Are you a corporate or a student?" do %>
<p></p>
<%= f.radio_button :profileable, 1, label: "Student", inline: true %>
<%= f.radio_button :profileable, 2, label: "Corporate", inline: true %>
<% end %>
</div>
用戶控制器
class UsersController < ApplicationController
def index
@users = User.paginate(page: params[:page], :per_page => 5).includes(:profile)
end
def show
if params[:id]
@user = User.find(params[:id])
# .includes(:profile)
else
@user = current_user
end
@searches = Search.where(user_id: @user).includes(:state, city: [:profile])
end
def new
@user = User.new
#@corporateprofile = Corporateprofile.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to widgets_index_path
else
redirect to '/signup'
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :password, :profile_type)
end
end
並且有在控制器上沒有通過代碼(如即時卡住上)。任何更好的建議或解決這個問題的方法將非常感謝!
乾杯
啊appologies尼克!我正在使用rails 4,並且意外地檢查了Rails - 3作爲標記,這意味着'attr_accessible'ias你知道不再有效。我已經將邏輯移動到控制器,以便profile_type是用戶參數的一部分,但是由於「UserProfile」是未初始化的常量而出現錯誤。 –
糟糕,這意味着'attr_accessor'不是'attr_accessible'。現在編輯。如果你的控制器代碼有問題,你也應該發佈,但是聽起來你還沒有爲UserProfile創建一個模型。 –
aha,好的,我已經用attr_accessor更新了我的代碼。另請注意,我決定不實施UserProfile繼承,因爲這兩個配置文件完全不同。我的挑戰是企業簡介始終在生成,而不是學生簡介。 –