真实故事:我有模特用户,个人资料和雇用。
用户有一个个人资料。用户可以雇用任何用户来完成这项工作,以便我可以实现User.first.hires
#user.rb
has_one :profile
has_many :hires
before_create :build_profile
我需要知道用户雇用了谁,所以我设置了一个外键(profile_id),因为(user_id)是当前用户。 Hire模型看起来像这样,减去时间戳:
#Hire Model
:id => integer,
:user_:id => integer, #foreign key for user
:foo => :string,
:profile_id => :integer #foreign key for profile
现在列出所有" John"雇用:
h = User.first.hires
h.map do |p| p.profile_id end
我的问题是,profile_id
未被分配,如果由于路线或关联而导致我丢失。我可以在rails_admin中分配没有问题。
#profile.rb
belongs_to :user
has_many :hires
hire.rb:
belongs_to :user
belongs_to :profile
我为公司views/company/show.html.erb
创建了一个展示页面。该页面有一个雇用流程的模式。该模态来自渲染:views/hires/_form.html.erb
。并以这种形式:
<%= form_for @hire, url: user_accounts_hires_path(current_user), :html => { :data => {:abide => ''}, :multipart => true } do |f| %>
<h1>Hire Form</h1>
<!--text fields and submit button-->
<% end %>
hires_controller.rb:
def new
@hire = Hire.new
end
def show
@hire = Hire.find( params[:id] )
end
def create
employer = User.find( params[:user_id] )
@hire = employer.hires.build(hire_params)
if @hire.save
#flash yes, no etc
end
end
private
def hire_params
params.require(:hire).permit(:a, :b, :c)
end
回顾:
我在公司页面上。按下按钮进行模态,填写表格,点击提交,一切都很顺利,但未分配profile_id
。只有user_id
。还有什么你需要看的吗?
回答aliibrahim:
更新创建方法:
...
employer = current_user
contractor_id = User.find( params[:user_id] ).profile.id
@hire = employer.hires.build(hire_params.merge({"profile_id" => contractor_id}))
...
对于表单(用params [:id]替换current_user):
<%= form_for @hire, url: user_accounts_hires_path(params[:id]), :html => { :data => {:abide => ''}, :multipart => true } do |f| %>
答案 0 :(得分:0)
您需要更新控制器中的def create
def create
employer = current_user
contractor_id = User.find( params[:user_id] ).profile.id
@hire = employer.hires.build(hire_params.merge({"profile_id" => contractor_id})
if @hire.save
#flash yes, no etc
end
end
您的hire_params方法也应该permit
profile_id