抱歉Noob的问题。我有一个允许用户创建简历的表单。我创建了一个简历脚手架,其中包含标题和职业目标的输入。我为其他部分(经验,教育,技能)制作了单独的数据库表。我希望使用一个表单resumes/views/_form.html
和简历控制器提交所有这些信息。所以在简历模型中我放了(has_many :experiences
)并且在体验模型中我放了{belongs_to :resume
)。 “我的体验”表格包含两个字段(:job_title
,:job_description
),因此在views/resumes/_form.html
中,我为:job_title
和:job_description
添加了两个字段。我有点迷失在这一点上。如何使用Resume控制器的“新”和“创建”方法将这些输入值保存到相应的数据库表中?我知道我现在缺少代码,但如果有任何帮助我会收到此错误:
undefined method `job_title' for #<Resume:0x007fe5b2304748>
Trace of template inclusion: app/views/resumes/new.html.erb
app/views/resumes/_form.html.erb:24:in `block in _app_views_resumes__form_html_erb___303730996527532694_70312260165660'
app/views/resumes/_form.html.erb:1:in `_app_views_resumes__form_html_erb___303730996527532694_70312260165660'
app/views/resumes/new.html.erb:3:in `_app_views_resumes_new_html_erb___2010250825676564736_70312281682320'
这是/resumes/_form.html.erb视图
<%= form_for(@resume) do |f| %>
<% if @resume.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@resume.errors.count, "error") %> prohibited this resume from being saved:</h2>
<ul>
<% @resume.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :objective %><br>
<%= f.text_area :objective %>
</div>
<%= fields_for @experience do |fa| %>
<div class="field">
<%= fa.label :job_title %><br>
<%= fa.text_area :job_title %>
</div>
<div class="field">
<%= fa.label :company_name %><br>
<%= fa.text_area :company_name %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
resumes_controller
class ResumesController < ApplicationController
before_action :set_resume, only: [:show, :edit, :update, :destroy]
# GET /resumes
# GET /resumes.json
def index
@resumes = Resume.all
end
# GET /resumes/1
# GET /resumes/1.json
def show
end
# GET /resumes/new
def new
@resume = Resume.new
end
# GET /resumes/1/edit
def edit
end
# POST /resumes
# POST /resumes.json
def create
@resume = Resume.new(resume_params)
respond_to do |format|
if @resume.save
format.html { redirect_to @resume, notice: 'Resume was successfully created.' }
format.json { render action: 'show', status: :created, location: @resume }
else
format.html { render action: 'new' }
format.json { render json: @resume.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /resumes/1
# PATCH/PUT /resumes/1.json
def update
respond_to do |format|
if @resume.update(resume_params)
format.html { redirect_to @resume, notice: 'Resume was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @resume.errors, status: :unprocessable_entity }
end
end
end
# DELETE /resumes/1
# DELETE /resumes/1.json
def destroy
@resume.destroy
respond_to do |format|
format.html { redirect_to resumes_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_resume
@resume = Resume.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def resume_params
params.require(:resume).permit(:title, :objective)
end
end
答案 0 :(得分:1)
我认为你需要改变
<%= fields_for @experience do |fa| %>
到
<%= f.fields_for @experience do |fa| %>
并确保在模型中正确设置accepts_nested_attributes_for
。