0

create メソッドでデータを入力したときに、ユーザーのデータが有効でない場合、ユーザーの入力は の後に保存されませんrender 'new'。無効なユーザー入力を保存したいと思います。これを修正する方法について誰かアイデアがありますか?

ちなみに、私の ContactForm オブジェクトはデータベース上の何にもリンクされていないため、save? を使用していません。

class ContactController < ApplicationController
   def new
      @contact_form = ContactForm.new
   end

   def create
      @contact_form = ContactForm.new(params[:contact_form])

      if @contact_form.valid? && verify_recaptcha(model: @contact_form , message: EBM::RECAPTCHA_ERROR)
         redirect_to contact_create_path
      else
         render :action => 'new'
      end 
   end
end

編集: mind.blank の提案に基づいてリファクタリングされました。しかし、問題は解決しません。

Edit2: 追加されたビュー:

<div id="quote" class="hero-unit centerpiece">
   <form action="/contact" method="post" class="form-horizontal">
      <fieldset>

     <!-- Form Name -->
     <h1 class="form-header">Contact Us</h1>
     <!-- Text input-->
     <%= render 'shared/error', object: @contact_form %>
     <div class="control-group">
        <label class="control-label">Your Name</label>
        <div class="controls">
           <input id="name" name="contact_form[name]" type="text" placeholder="Your Name" class="input-xlarge"  >

        </div>
     </div>

     <!-- Text input-->
     <div class="control-group">
        <label class="control-label">Your Email</label>
        <div class="controls">
           <input id="email" name="contact_form[email]" type="text" placeholder="Your Email" class="input-xlarge" required="" >
        </div>
     </div>

     <!-- Textarea -->
     <div class="control-group">
        <label class="control-label">Your Message</label>
        <div class="controls">                     
           <textarea id="Your Message" class="message-area" name="contact_form[user_message]" required=""></textarea>
        </div>
     </div>
     <div class="recaptcha">
        <%= recaptcha_tags %>
     </div>
     <%= submit_tag "Submit", class: "btn btn-large btn-primary" %>
      </fieldset>
   </form>
</div>
4

1 に答える 1

0

Hash.newアクションから削除してみてくださいnew:

def new
  @contact_form = ContactForm.new
end

またslice、必要なパラメーターを取得するために使用できます。

def create
  @contact_form = ContactForm.new(params.slice(:name, :email, :user_message))
  ...
end

通常はそのまま通過できますが、params[:contact_form]

于 2013-04-28T01:35:22.013 に答える