2017-05-29 3 views
0

Hello railsコミュニティ!関連するモデルのエラーメッセージを設定するにはどうすればよいですか?

has_manyの予約があるbooking_postモデルがあります。

class BookingPost < ApplicationRecord 
    has_many :reservations, dependent: :destroy 
end 

booking_post belongs_toのすべての予約と私のルートは次のいくつかの検証

class Reservation < ApplicationRecord 
    belongs_to :booking_post 
    before_save { self.email = email.downcase } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255 }, 
        format: { with: VALID_EMAIL_REGEX } 
    validates :name, :email, :phone_number, :start, :end, presence: true 
end 

を持っている:

resources :booking_posts do 
    resources :reservations, only: [:new, :create] 
end 

方法:

class BookingPostsController < ApplicationController 
    def show 
    @booking_picture = @booking_post.booking_pictures.build 
    @booking_pictures = @booking_post.booking_pictures 
    @reservation = @booking_post.reservations.build 
    @reservations = @booking_post.reservations 
    end 
end 


class ReservationsController < ApplicationController 
    def new 
    @reservation = Reservation.new 
    end 
    def create 
    @booking_post = BookingPost.find(params[:booking_post_id]) 
    @email= User.where(admin: true).first.email 
    @reservation = @booking_post.reservations.build(reservation_params) 
     if @reservation.save 
     @saved_reservation = @reservation 
     redirect_to :back 
     flash[:notice] = 'Reservation was successfully created.' 
     ReservationMailer.fresh_message(@saved_reservation, @email).deliver_now 
     else 
     redirect_to @booking_post 
     flash[:info] = @reservation.errors.full_messages do |m| 
      m 
     end 
     end 
    end 
end 

私はbooking_postsに作成したいです/show.html.e rb form_for @reservation、および@reservationのこのページのエラーをレンダリングします。有効な@保存を作成すると、booking_posts/show.html.erb成功したフラッシュメッセージが表示されますが、無効な@保存はエラーメッセージなしで表示されます。 booking_posts/show.html.erb上@reservationのform_for

<div class="card-action"> 
    <%= form_for([@reservation.booking_post, @reservation], html: {multipart: true}, class: "col s12") do |f| %> 
    <% if @reservation.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@reservation.errors.count, "error") %> prohibited this post from being saved:</h2> 

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

    <div class="col s6"> 
    <%= f.label :start %> 
    <%= f.date_field :start, placeholder: "start time", class: "datepicker" %> 
    </div> 
    <div class="col s6"> 
    <%= f.label :end %> 
    <%= f.date_field :end, placeholder: "end time", class: "datepicker" %> 
    </div> 
    <div class="col s6"> 
    <%= f.label :reservation_time %> 
    <%= f.time_field :reservation_time, placeholder: "time", class: "timepicker", id: "timepicker", type: "time" %> 
    </div> 

    <div class="input-field col s6"> 
    <%= f.label :name %> 
    <%= f.text_field :name, class: "validate" %> 
    </div> 
    <div class="input-field col s6"> 
    <%= f.label :email %> 
    <%= f.text_field :email, class: "validate" %> 
    </div> 
    <div class="input-field col s6"> 
    <%= f.label :phone_number %> 
    <%= f.text_field :phone_number, class: "validate" %> 
    </div> 

    <div class="waves-effect waves-light btn"> 
    <%= f.submit t(:submit_reservation)%> 
    </div> 

<% end %> 
<br> 
</div> 

私は(ないnew_reservation_pathまたは他anytingで、booking_post_pathに)@booking_postページ に@reservationのエラー・メッセージをレンダリングしたいと思います。どうすればいいですか?あなたのelseブロックでソリューション

答えて

1

ため

おかげで、この

flash[:notice] = @reservation.errors.full_messages.to_sentence 
    redirect_to @booking_post 
+0

おかげJunanのようにそれを更新してください。それは働いている。少し質問があります。私はフラッシュ[:危険]、フラッシュ[:警告]、フラッシュ[:警告]を使用してエラーフラッシュの色を変更しようとしていて、メッセージは表示されませんでした。あなたの解決策は、フラッシュ[:notice]だけで動作します。あなたはその理由を知っています。 – anndrew78

+1

これを行うには、レールフラッシュキーをブートストラップアラートクラスにマップする必要があります。この非常に簡単なチュートリアルに従ってください。 https://coderwall.com/p/jzofog/ruby-on-rails-flash-messages-with-bootstrap –

関連する問題