jeudi 24 novembre 2016

Error validations from child model Ruby on Rails

I got a problem which I can't solve. I made two models; one model called Film is the parent model and another model called Review is the child model. I got validation conditions on the child model but it does not display on the view.

Film model

class Film < ApplicationRecord
has_many :reviews

validates_presence_of :filmtitle,  presence: true
validates_presence_of :filmdescription,  presence: true
validates_presence_of :filmdirector,  presence: true
validates_presence_of :filmrating,  presence: true
validates_presence_of :filmstarname,  presence: true 
end

Review model

class Review < ApplicationRecord
validates :rating,  presence: true
validates :commenter,  presence: true
validates :body,  presence: true
belongs_to :film
end

Review Controller

class ReviewsController < ApplicationController
def create
    @film = Film.find(params[:film_id])
    @review = @film.reviews.create(review_params)
    redirect_to film_path(@film)
end

private
def review_params
  params.require(:review).permit(:commenter, :body, :rating)
end
end

Film show.html.erb

  <% if @film.errors.any? %>
<div id="error_explanation">
  <h2>
    <%= pluralize(@film.errors.count, "error") %></h2>
  <ul>
    <% @film.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
  </ul>
  </div>
  <% end %>
<%= form_for([@film, Review.new]) do |f| %>
<p>
 <%= f.label :commenter %><br>
 <%= f.text_field :commenter, :placeholder => 'Your name' %>
</p>
 <p>
 <%= f.label :body %><br>
 <%= f.text_area :body, :placeholder => 'Your comment' %>
 </p>
  <p>
    <%= f.label :rating %><br>
    <%= f.select :rating, ['1 Star', '2 Stars', '3 Stars', '4 Stars', '5    Stars'] %>
 </p>
  <p>
 <%= f.submit %>
  </p>
 <% end %>

Film Controller

class FilmsController < ApplicationController
before_action :set_film, only: [:show]

# GET /films
# GET /films.json
def index
@films = Film.all.paginate(page: params[:page], per_page: 30)
@reviews = Review.new
end

# GET /films/1
# GET /films/1.json
def show
end

# GET /films/new
 def new

 end

 # GET /films/1/edit
def edit
 end

# POST /films
# POST /films.json
def create

end

# PATCH/PUT /films/1
# PATCH/PUT /films/1.json
def update

end

# DELETE /films/1
# DELETE /films/1.json
def destroy

end

private
# Use callbacks to share common setup or constraints between actions.
def set_film
  @film = Film.find(params[:id])
end

 # Never trust parameters from the scary internet, only allow the white list   through.
def film_params
  params.require(:film).permit(:filmtitle, :filmdescription)
end
 end

Aucun commentaire:

Enregistrer un commentaire