2014-10-12 122 views
0

我有一个模型作业。一份工作需要很多技能。但是当我试图挽救我的工作时就失败了。我不确定我明白我做错了什么。 我的模型:Rails 4,嵌套保存属性

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 Exception:

Couldn't find Skill with ID=4 for Job with ID= nil

+0

大概dubplicate的[Rails的:多级嵌套表格(接受嵌套属性)] [1] [1]:http://stackoverflow.com/q/23952099/1065703 – 2014-10-12 09:23:56

+0

@MartinM呜呜,创建后无法工作,因为问题发生在Job.new() – bl0b 2014-10-12 09:58:43

+0

不应该是'has_many:job_skills'在第一个模型中,而不是''has_many:jobskills'? – GMA 2014-10-12 10:10:27

回答

0

你的代码对我来说有点混乱。 看来,你想创造一份工作并定义,这项工作需要什么技能。 为什么你需要嵌套属性? 通常情况下,你

  • 任编辑的所有技能,这很可能需要一份工作,然后分配propper技能那份工作,比你有一个has_and_belongs_to_many关系,并可以使用集合形式助手名单。在这种情况下,你不需要一个模型JobSkill(但表jobs_skills存储的关系,并通过Rails的透明地处理)

  • 或添加随机技能的工作,那么你的工作has_may :skills和每一个技能属于正是一份工作。在这里你可以使用嵌套属性。然后你需要一种方法来添加嵌套的技能实例,即cocoon。同样,您不需要型号JobSkill

哪一个是你的用例,所以我可以更详细地解释它。

+0

哇,我现在觉得哑巴了。我确实需要has_and_belongs_to_many关系。 我会试试这个。非常感谢! – bl0b 2014-10-13 02:28:16