2016-03-08 4 views
-1

Не могли бы я любезно посоветовать мне, как передать идентификатор с помощью новых и новых действий. Я пробовал много способов добиться этого, но, к сожалению, не успел.передать параметр 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, но форма не будет отправляться, а сообщения об ошибках: не отображается.

мог один любезно сообщить мне, как успешно пройти через идентификатор действия новых и создать или где я буду неправильно большое спасибо

ответ

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

Смежные вопросы