2016-03-08 46 views
-1

能否告訴我如何通過新的和創建的動作傳遞一個id。我嘗試了很多方法來解決這個問題,但不幸的是沒有成功。將id參數傳遞給新的創建動作 - Rails 4

什麼,我的目標是什麼,當求職者(用戶)在 應用填充和申請未能通過驗證,我希望有一個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 

當求職者完成應用程序形式 (形式/ _form.html.erb)和驗證失敗的求職者(用戶)是 針對一個新的形式與advert_id通過redirect_to :action => :new, :advert_id => @form.advert_id

這引導我一個新的形式,我可以看到advert_id已通過 通過URL但窗體將不會提交和錯誤消息 不顯示。

可能一個好心告訴我如何順利通過 行動傳遞新的ID,並創建或我要去的地方錯了很多感謝

回答

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 
+0

感謝你洙多! – ARTLoe

+0

@ARTLoe很高興幫助某人。 – Lymuel

相關問題