有人可以告诉我如何通过新的动作传递id并创建。我已经尝试了许多方法来做到这一点,但不幸的是没有成功。
我的目标是,当求职者(用户)填写时 应用程序和应用程序未通过验证,我想要
new form to render with the advert_id passed
到
我有一个招聘广告,其中我已通过申请按钮
中的advert_idadvert/show.html.erb
<div class="advert_summary">
<ul class="content">
<li><%= @advert.currency %><%= @advert.salarystart %> - <%= @advert.currency %><%= @advert.salaryend %> <%= @advert.category_period.name %></li>
<li>Job Type: <%= @advert.category_jobtype.name %></li>
<li>Job Ref: #<%= @advert.reference %></li>
<li>Posted: <%= @advert.created_at.strftime("%b %d, %Y") %></li>
<li>Deadline: <%= @advert.appdeadline.strftime("%b %d, %Y") %></li>
</ul>
</div>
<button><%= link_to 'Apply for job', new_form_path(advert_id: @advert.id) %></button>
我将advert_id作为表单中的隐藏字段(作业的申请表)
forms/_form.html.erb
<div>
<h2>Application Form</h2>
<%= simple_form_for(@form) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input_field :firstname, value: current_user.firstname, label: "firstname", placeholder: "first name" %>
<%= f.input_field :lastname, value: current_user.lastname, label: "lastname", placeholder: "last name" %>
<%= f.input_field :tel, value: current_user.tel, label: "number", placeholder: "number" %>
<%= f.input_field :email, value: current_user.email, label: "email", placeholder: "email" %>
<%= f.hidden_field :advert_id, value: params[:advert_id] %>
</div>
<div class="form-actions">
<%= f.button :submit, 'Submit Application' %>
</div>
<% end %>
</div>
在我的控制器forms_controller.rb中,我已为create action
class FormsController < ApplicationController
respond_to :html, :xml, :json
before_action :set_form, only: [:show, :edit, :update, :destroy]
def new
@advert = Advert.find(params[:advert_id])
@user = current_user
@form = Form.new
@search = Advert.search(params[:q])
@adverts = @search.result(distinct: true)
end
def create
@user = current_user
@form = Form.new(form_params)
@advert = @form.advert
@form.user_id = current_user.id
@advert = @form.advert
if @form.save
redirect_to application_submitted_path
else
redirect_to :action => :new, :advert_id => @form.advert_id
# render :new, :advert_id => @form.advert_id
# redirect_to :action => :new, :advert_id => @form.advert_id
# redirect_to user_advert_path(@form.advert.user, @form.advert)
# respond_with(@form)
end
end
end
models
advert.rb
has_many forms
form.rb
belongs_to advert
belongs_to user (jobseeker)
user.rb (jobseeker)
has_many forms
schemas.rb
create_table "forms", force: true do |t|
t.integer "advert_id"
t.integer "user_id"
end
create_table "adverts", force: true do |t|
t.string "title"
t.text "content"
t.integer "salarystart"
t.integer "salaryend"
t.string "reference"
end
create_table "users", force: true do |t|
t.string "email",
t.string "firstname"
t.string "lastname"
end
当求职者填写申请表时 (forms / _form.html.erb)并且jobseeker(用户)验证失败 通过
传递ads_id定向到新表单redirect_to :action => :new, :advert_id => @form.advert_id
这会将我引导到一个新表单,我可以看到advert_id已经通过 通过网址,但表单将不会提交和错误消息 没有显示。
有人可以告诉我如何成功传递id 行动新的和创造或我错了很多谢谢
答案 0 :(得分:1)
试试这个
forms/_form.html.erb
<div>
<h2>Application Form</h2>
<%= simple_form_for(@form) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input_field :firstname, value: current_user.firstname, label: "firstname", placeholder: "first name" %>
<%= f.input_field :lastname, value: current_user.lastname, label: "lastname", placeholder: "last name" %>
<%= f.input_field :tel, value: current_user.tel, label: "number", placeholder: "number" %>
<%= f.input_field :email, value: current_user.email, label: "email", placeholder: "email" %>
<%= f.hidden_field :advert_id, value: @advert_id %>
</div>
<div class="form-actions">
<%= f.button :submit, 'Submit Application' %>
</div>
<% end %>
</div>
class FormsController < ApplicationController
respond_to :html, :xml, :json
before_action :set_form, only: [:show, :edit, :update, :destroy]
def new
@advert = Advert.find(params[:advert_id])
@user = current_user
@form = Form.new
@search = Advert.search(params[:q])
@advert_id = params[:advert_id]
@adverts = @search.result(distinct: true)
end
def create
@user = current_user
@form = Form.new(form_params)
@advert = @form.advert
@form.user_id = current_user.id
@advert_id = params[:form][:advert_id]
@advert = @form.advert
respond_to do |format|
if @form.save
format.html { redirect_to @form, notice: 'Created.' }
format.json { render :show, status: :created, location: @form }
else
format.html { render :new }
format.json { render json: @form.errors, status: :unprocessable_entity }
end
end
end
end