将id参数传递给新的创建操作 - Rails 4

时间:2016-03-08 01:11:47

标签: ruby-on-rails-4

有人可以告诉我如何通过新的动作传递id并创建。我已经尝试了许多方法来做到这一点,但不幸的是没有成功。

  

我的目标是,当求职者(用户)填写时   应用程序和应用程序未通过验证,我想要new form to render with the advert_id passed

我有一个招聘广告,其中我已通过申请按钮

中的advert_id
advert/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(用户)验证失败   通过redirect_to :action => :new, :advert_id => @form.advert_id

传递ads_id定向到新表单      

这会将我引导到一个新表单,我可以看到advert_id已经通过   通过网址,但表单将不会提交和错误消息   没有显示。

     

有人可以告诉我如何成功传递id   行动新的和创造或我错了很多谢谢

1 个答案:

答案 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