2016-10-03 6 views
0

강사라는 두 가지 모델이 있으며 관련 요청을 함께 처리합니다. 강사에게 속한 요청을 제출하고 싶지만 콘솔에서 다음 오류가 표시됩니다. 누군가 나를 도울 수 있습니까?. 그것 (때문에 save 반환 false)를 리디렉션하지 않도록 감사합니다,레일에 양식을 제출할 수 없습니다

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

귀하의 모델은 유효하지 않습니다. 그래서 당신은 update 조치를 재 작성해야합니다

def create 
    @request = Request.new(request_params) 

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

업데이트 : 당신이 belongs_to를 선언하는 경우 그것은 또한 외래 키에 대한 존재 유효성 검사를 추가 있도록

당신은, 레일 5.0 사용합니다. 귀하의 요청 컨트롤러가 강사 아래에 중첩되어있는 경우 당신은 아마 의미

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

나는 왜 그 false를 반환하는지 잘 모르겠다. 또한 여전히 (0.1ms) 거래 시작 (0.1ms) 롤백 트랜잭션 – Faisal

+0

귀하의 모델을 볼 수 없으므로 어떤 유효성 검사인지 말할 수 없습니다. 'dsadas'는 유효한 이메일이 아님을 짐작할 수 있습니다. – MikDiet

+0

아직 유효성을 검증하지 않았습니다! 그 유일한 (요청) belongs_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

이 경로에 복종하는 방법을 모르십니까? instructor_requests POST /instructors/:instructor_id/requests(.:format) requests # create – Faisal

+0

충분한 정보를 게시하지 않아서 죄송합니다. github https://github.com/FaisalFehad/instructor_finder – Faisal

관련 문제