2016-10-03 5 views
0

У меня есть 2 модели, называемые инструкторами и связанные с ними запросы. Я хотел бы отправить запрос, который принадлежит инструктору, но получить следующую ошибку на консоли. Может кто-нибудь мне помочь? Спасибо,Невозможно отправить форму в Rails

Processing by RequestsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"SaLDbXaZOy2cvGILrC9IJ7vInkF0xG42bf84k3IcDj+eFN9lTRfZlkGUMr8s82zQEdO9dgJ3Set935RGH8uv9w==", "request"=>{"name"=>"dsada", "email"=>"dsadas", "phone"=>"sadsadd", "message"=>"sadsa"}, "commit"=>"Create Request"} 
    (0.1ms) begin transaction 
    (0.1ms) rollback transaction 
No template found for RequestsController#create, rendering head :no_content 
Completed 204 No Content in 38ms (ActiveRecord: 0.3ms) 

Запрос формы

<hr> 
<%= simple_form_for([@request, @instructor.requests.build], :url =>{ :controller =>"requests", 
               :action => "create" }) do |f| %> 
    <%= f.input :name, label: "Your name" %> 
    <%= f.input :email %> 
    <%= f.input :phone, label: "Phone number" %> 
    <%= f.input :message, as: :text %> 
    <br> 
    <%= f.button :submit, class: "btn btn-danger" %> 
<% end %> 
<br> 
<br> 

запросов контроллер

class RequestsController < ApplicationController 

    def index 
    if params[:search].present? 
     @instructors = Instructor.near(params[:search], 50) 
    else 
     # Shows all listed instructors by the created date. 
     @instructors = Instructor.order('created_at DESC') 
    end 
    end 

    def show 
    @instructor = Instructor.find(params[:id]) 
    end 

    def create 
    @request = Request.new(request_params) 

    if @request.save 
     redirect_to "root" 
    end 
    end 

    private 

    def request_params 
    params.require(:request).permit(:name, :email, :phone, :message) 
    end 
end 

ответ

0

Ваша модель является недействительным, так что не перенаправляет (потому что save возвращается false). Таким образом, Вы должны переписать update действие:

def create 
    @request = Request.new(request_params) 

    if @request.save 
    redirect_to "root" 
    else 
    render :new 
    end 
end 

Обновление:

Вы используете Rails 5.0, так что если вы объявляете belongs_to он также добавляет проверку присутствия для внешнего ключа. Итак, вам нужно создать объект запроса таким образом:

@request = Instructor.find(params[:instructor_id]).requests.build(request_params) 
+0

Я не уверен, почему его возвращение ложно ?. Также по-прежнему получать транзакцию (0.1ms) begin (0.1ms) транзакция отката – Faisal

+0

Я не вижу вашу модель, поэтому не могу сказать, какие проверки она имеет. Можно догадаться, 'dsadas' недействителен Email – MikDiet

+0

У меня еще не было никаких валидаций! его единственный (запрос) принадлежит_to: инструктор и (инструктор) has_many: запросы – Faisal

1

Если контроллер ваших запросов вложен под инструкторами вы, вероятно, имели в виде:

simple_form_for([@instructor, @instructor.requests.build], ... 

Также очень часто для этих контроллеров иметь:

@instructor = Instructor.find(params[:id]) 
@request = @instructor.requests.new(request_params) 
if @request.save 
    # ... 

Удалите :url =>{ :controller =>"requests", :action => "create" его излишним, форма строитель должен понять, что из [@request, @instructor.requests.build]

Если вы сохранили @request, вы перенаправляетесь на root_path, но вы ничего не делаете, если запросы терпят неудачу (что похоже на случай), это также часто встречается в render "new". См. Образец контроллера в направляющих: http://guides.rubyonrails.org/action_controller_overview.html#parameters.

В конечном итоге вы можете изменить это поведение по умолчанию, но я рекомендую вам начать с основ и изменить его, как только вы знаете, как это работает.

+0

Я действительно забыл отступы запрашивать маршруты под инструкторами! – Faisal

+0

Не знаете, как подать заявку на этот маршрут? trainer_requests POST /instructors/:instructor_id/requests(.:format) запросы # create – Faisal

+0

Прошу прощения за то, что не опубликовал достаточно информации. Пожалуйста, взгляните на github https://github.com/FaisalFehad/instructor_finder – Faisal

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