我有一个模特约会。工作需要很多技能。但是,当我试图保存我的工作时,它失败了。我不确定我明白自己做错了什么。 我的模特:
class Skill < ActiveRecord::Base
has_many :job_skills
has_many :jobs, through: :job_skills
end
class JobSkill < ActiveRecord::Base
belongs_to :skill
belongs_to :job
end
class Job < ActiveRecord::Base
has_many :job_skills, :inverse_of => :job
has_many :skills, through: :job_skills
accepts_nested_attributes_for :job_skills
end
我的观点:
<%= form_for @job do |f| %>
<div class="row">
<div class="col-md-8">
<h4>General informations</h4>
<br />
<div class="form-group">
<%= f.label :title %>
<%= f.text_field :title, :autofocus => true, class:'form-control' %>
</div><br />
<%= f.fields_for :job_skills do |s| %>
<%= s.text_field :id %>
<% end %>
</div>
</div>
<div class="submit" style="position:relative;">
<%= f.submit "Save", class: 'button button-small' %>
</div>
<% end %>
我的控制器:
class JobsController < ApplicationController
before_filter :authenticate_user!, :has_company?, :except => [:index, :show]
def create
@job = Job.new(job_params)
@job.company_id = current_user.company_id
@job.user_id = current_user.id
if @job.save
flash[:notice] = "This job offer has been saved."
return redirect_to job_path(@job)
else
flash[:error] = @job.errors.full_messages.to_sentence
render action: :new
end
end
def new
if current_user.company.present?
@job = Job.new(email:current_user.email)
@job.job_skill.build
else
flash[:error] = "You need to create a company before posting a job"
return redirect_to new_company_path()
end
end
private
def job_params
params.require(:job).permit(:status, :title, :description, :remote ,:job_type, :visa_sponsor, :email, :salary_max, :salary_min, :country, :state, :city, job_skill_attributes: [:id])
end
end
所以,我不确定我做错了什么,当我试图保存时,我收到以下错误:
@job = Job.new(job_params)
ActiveRecord :: RecordNotFound例外:
对于ID = nil
的作业,找不到ID = 4的技能
答案 0 :(得分:0)
你的代码对我来说有点混乱。 看起来,你想要创造一份工作并定义,这项工作需要什么技能。 为什么需要嵌套属性? 通常,你
编辑所有技能的列表,这些技能可能是作业可能需要的,然后将作业技能分配给该作业,而不是has_and_belongs_to_many
关系,并且可以使用表单助手进行收藏。在这种情况下,您不需要模型JobSkill
(但是表jobs_skills
来存储关系并且由Rails透明地处理)
或将随机技能添加到工作中,然后您的工作has_may :skills
和每项技能只属于一项工作。在这里,您可以使用嵌套属性。然后,您需要一种方法来添加嵌套技能实例,即使用cocoon。同样,您不需要模型JobSkill
。
哪一个是你的用例,所以我可以更详细地解释一下。