2016-10-03 12 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

あなたのモデルは無効であるので、(falsesave返すので)をリダイレクトしません。だから、あなたは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)トランザクションを開始しています (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

関連する問題