2017-09-14 19 views
1

データを保存しようとしていますが、データを送信する際にページを更新するだけですが、実際にはテーブルにデータを保存しません。それでもエラーを出すことはありません。私がしたいことは、データを保存した後、コントロールは空のテキストボックスで同じページに来るべきです。 Rubyの2.4.1、Railsの5.1.3を使用してデータがRailsアプリケーションに保存されていません

、sqlite3の

これはfeedback_controller.rb

class FeedbackController < ApplicationController 
    def new 
    @feedback = Feedback.new 
    end 

    def create 
    @feedback = Feedback.new(feedback_params) 
    redirect_to root_path 

    respond_to do |f| 
     if @feedback.save 
     f.html {redirect_to @feedback, notice: 'feedback submitted'} 
     f.json {render :new, status: :created, location: :@feedback} 
    else 
     f.html {render :new } 
     f.json {render json: @feedback.errors, status: :unprocessable_entity} 
    end 
    end 
    end 

    private 

    # def set_feedback 
    # @feedback = Feedback.find(params[:id]) 
    # end 

    def feedback_params 
    params.require(:feedback).permit(:name, :email, :message) 
    end 
    end 

そして、ここの内容ではnew.html.erbファイルです。

<%= form_with scope: :feedback, url: feedback_new_path, local: true do |form| %> 

<% if @feedback.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(feedback.errors.count, "error") %> prohibited this feedback from being saved:</h2> 

     <ul> 
     <% @feedback.errors.full_messages.each do |message| %> 
      <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= form.label :name %> 
    <%= form.text_field :name, id: :feedback_name %> 
    </div> 

    <div class="field"> 
    <%= form.label :email %> 
    <%= form.text_field :email, id: :feedback_email %> 
    </div> 

    <div class="field"> 
    <%= form.label :message %> 
    <%= form.text_area :message, id: :feedback_message %> 
    </div> 

    <div class="actions"> 
    <%= form.submit "Submit Feedback"%> 
    </div> 
<% end %> 

<%= link_to 'Home', root_path %> 

これは、データを格納しながらピューマサーバーがログに言って何です:

Started POST "/feedback/new" for 127.0.0.1 at 2017-09-14 21:33:41 +0530 
Processing by FeedbackController#new as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"Dk1sGiKYryIOeU6HyO7zeX6wqXazj9BUfooJgIDH1JjHxuKwA5MT0E6zvuwFYXGA8xEOz+tGAiXWySKv7voKvg==", "feedback"=>{"name"=>"sheshang", "email"=>"[email protected]", "message"=>"this is demo message"}, "commit"=>"Submit Feedback"} 
    Rendering feedback/new.html.erb within layouts/application 
    Rendered feedback/new.html.erb within layouts/application (3.8ms) 
Completed 200 OK in 75ms (Views: 55.2ms | ActiveRecord: 1.3ms) 

がこの問題に加えて、私はどのようにアプリをレールにデバッグすることを知ってほしいです。 Cやその他のプログラムと同様に、コントロールが内部にあるかどうかを確認するためにprintfステートメントを使用しました。私たちはRailsでどのようにできるのですか?

答えて

0

あなたが見ることができるように、あなたはnewアクションに投稿している:

Started POST "/feedback/new" for 127.0.0.1 at 2017-09-14 21:33:41 +0530 
Processing by FeedbackController#new as HTML 

しかしnewアクションは保存しません。

だから、あなたはおそらくしたい:規約により

<%= form_with scope: :feedback, url: feedbacks_path, local: true do |form| %> 

、あなたは(あなたのroutes.rbファイルで)行う場合:

resources :feedbacks 

、あなたが得る必要があります。

feedbacks GET  /feedbacks(.:format)    feedbacks#index 
       POST  /feedbacks(.:format)    feedbacks#create 
new_feedback GET  /feedbacks/new(.:format)   feedbacks#new 
edit_feedback GET  /feedbacks/:id/edit(.:format)  feedbacks#edit 
    feedback GET  /feedbacks/:id(.:format)   feedbacks#show 
       PATCH  /feedbacks/:id(.:format)   feedbacks#update 
       PUT  /feedbacks/:id(.:format)   feedbacks#update 
       DELETE  /feedbacks/:id(.:format)   feedbacks#destroy 

として、これはのPOST動詞を生成しません0アクション。これは、従来のルートを使用していないことを示しています。それが本当であれば、feedbacks_pathになるように経路を更新する必要があります。

慣習に従うことをお勧めします。これはしばしば人生をより容易にするためです。

限り印刷がコンソールにと、私は何をする傾向がある:

puts "#{self.class}.#{__method__}, var: #{var}" 

私は私が調べたいものは何でも変数とvarを交換してください。私は#{self.class}.#{__method__}ビットを含めるのが好きです。これは、私がどのクラスと方法を使用しているかを私に知らせるためです。

+0

私はこの技術の新しい学習者です。だから私は具体的に何をすべきか、フィードバックやフィードバックを知らない。リソースを追加したとします。私のルートにフィードバックがあります。じゃあ何? – Sheshang

+0

私が提案した 'form_with'を更新しましたか?結果は? – jvillian

+1

はい私は更新しました。私は私が解決できると思ういくつかの依存的なエラーが発生しています。私にそれをさせてください。後でお知らせいたします – Sheshang

関連する問題