0

私の検証は、他のモデルの表示ページにあるネストされたフォーム - メッセージに対して機能しません。

コードは次のとおりです。

オンライン予約:

   <%= form_for([@trip, @trip.messages.build]) do |f| %>    

      <%= render 'shared/error_messages', object: f.object %>  

      <%= f.text_field :name, :class => "span3", :placeholder => "Name:" %>     
      <%= f.text_field :email, :class => "span3", :placeholder => "Email:" %>   
      <div class="h">    
        <%= f.text_field :subject, :class => "h", :value => (@trip.title) %>   
      </div>  

      <%= f.text_area :body, :class => "input-xlarge3", :placeholder => "Message:", :id => "textarea", :rows => "3" %>

      <%= f.submit :class => " btn btn-primary btn-large ", :value => "Send Message" %>    
  <% end %>                                
</div>

メッセージ.rb

class Message < ActiveRecord::Base

 belongs_to :trip  
 attr_accessible :name, :email, :subject, :body 

 validates_presence_of :name
 validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
 validates_length_of :body, :maximum => 500

end

messages_controller.rb

 class MessagesController < ApplicationController

   def create
      @trip = Trip.find(params[:trip_id])
      @message = @trip.messages.create(params[:message])     
   if @trip.messages.create
      MessageMailer.send_message(@message).deliver
      redirect_to thank_you_path        
   else    
      redirect_to trip_path(@trip)
   end
 end
end

_error_messages.rb

<% if object.errors.any? %>
  <div id="error_explanation">
   <div class="alert alert-error">
    The form contains <%= pluralize(object.errors.count, "error") %>.
   </div>
   <ul>
   <% object.errors.full_messages.each do |msg| %>
     <li>* <%= msg %></li>
   <% end %>
   </ul>
 </div>
<% end %>

上記のコード全体は問題なく動作しますが、検証部分は単純に無視されます。そして、私はエラーを見ていません。だから私は自分が間違っていることを理解できません。手伝ってくれますか?

ありがとうございました!

4

1 に答える 1

0

コントローラーに問題があると思います:

def create
  @trip = Trip.find(params[:trip_id])
  @message = @trip.messages.create(params[:message])     
  # the following line doesnt make sense
  # you're recreating an empty message
  # it should be something like "if @message.valid?"
  if @trip.messages.create
    MessageMailer.send_message(@message).deliver
    redirect_to thank_you_path        
  else    
    redirect_to trip_path(@trip)
  end
end

それを修正して、それが役立つかどうかを確認してください。

于 2012-08-20T16:07:28.413 に答える