Je suis un tutoriel Rails où je dois créer un site Web d'annuaire des endroits dans lesquels un utilisateur peut soumettre une critique.Impossible de soumettre une évaluation dans un site - Rails Directory Site Web de l'application
En ce moment, voici la chose:
Je peux enregistrer un utilisateur et je suis capable de se connecter. Une fois connecté, je peux également créer un nouvel emplacement dans la base de données. Je peux également accéder à la page Web de chaque lieu que j'ai créé.
J'ai un problème cependant. Sur chaque page de lieu, je ne peux pas soumettre la revue de l'endroit.
Tous les lieux ont une adresse, un numéro de téléphone, un site web, une description et une carte avec l'emplacement de ce lieu. Sur cette même page, j'ai un formulaire pour soumettre un avis, cependant, une fois que je clique sur le bouton créer un commentaire, rien ne se passe. Je ne peux pas voir l'avis sur la page et quand je vais à la console des rails, je peux vraiment voir qu'il n'y a pas un seul commentaire créé.
intérieur de mon app/views/critiques/_form.html.erb je ce code:
<div class="form-inputs">
<%= f.input :content, required: true %>
<%= f.hidden_field :place_id, required: true, value: @place_id %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
intérieur de mon app/views/critiques/_review.html.erb J'ai ce code:
<p>
<%= gravatar_tag review.user.email, size: 20 %><%= review.content %> by <%= review.user.name %>
</p>
intérieur de mon app/views/lieux/show.html.erb J'ai ce code:
<div class="row">
<div class="col-md-3">
<h3><%= @place.name %></h3>
<p><strong>Adress</strong><%= @place.address %></p>
<p><strong>Phone</strong><%= @place.phone %></p>
<p><strong>Website</strong><%= @place.website %></p>
<p><strong>Description</strong><%= @place.description %></p>
<div id="map-canvas" style = "width:230px; height:230px"></div>
</div>
<div class="col-md-9">
<h3>Reviews by People</h3>
<% if current_user %>
<h5>New Review</h5>
<%= render 'reviews/form' %>
<h5>All Reviews</h5>
<%= render @reviews %>
<% end %>
</div>
</div>
Sur mon places_controller.rb je:
class PlacesController < ApplicationController
before_action :authenticate_user!, only: [:new, :edit, :create, :update, :destroy]
before_action :set_place, only: [:show, :edit, :update, :destroy]
# GET /places
# GET /places.json
def index
@places = Place.all
end
# GET /places/1
# GET /places/1.json
def show
@reviews = @place.reviews
@review = Review.new
end
# GET /places/new
def new
@place = Place.new
end
# GET /places/1/edit
def edit
end
# POST /places
# POST /places.json
def create
@place = current_user.places.new(place_params)
respond_to do |format|
if @place.save
format.html { redirect_to @place, notice: 'Place was successfully created.' }
format.json { render :show, status: :created, location: @place }
else
format.html { render :new }
format.json { render json: @place.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /places/1
# PATCH/PUT /places/1.json
def update
respond_to do |format|
if @place.update(place_params)
format.html { redirect_to @place, notice: 'Place was successfully updated.' }
format.json { render :show, status: :ok, location: @place }
else
format.html { render :edit }
format.json { render json: @place.errors, status: :unprocessable_entity }
end
end
end
# DELETE /places/1
# DELETE /places/1.json
def destroy
@place.destroy
respond_to do |format|
format.html { redirect_to places_url, notice: 'Place was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_place
@place = Place.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def place_params
params.require(:place).permit(:name, :address, :description, :phone, :website)
end
end
En outre, jusqu'à présent ... voici mon code reviews.controller.rb:
class ReviewsController <ApplicationController
before_action :authenticate_user!
before_action :set_review, only: [:edit, :update, :destroy]
def edit
end
def create
@review = current_user.reviews.new(review_params)
respond_to do |format|
if @review.save
format.html { redirect_to place_path(@review.place) , notice: 'Review was successfully created.' }
else
format.html { render :new }
end
end
end
def update
respond_to do |format|
if @review.update(review_params)
format.html { redirect_to place_path(@review.place), notice: 'Review was successfully updated.' }
else
format.html { render :edit }
end
end
end
def destroy
@review.destroy
respond_to do |format|
format.html { redirect_to place_path(@review.place), notice: 'Review was successfully destroyed.' }
end
end
private
def set_review
@review = Review.find(params[:id])
end
def review_params
params.require(:review).permit(:content, :place_id)
end
end
Toute idée des raisons pour lesquelles je ne peux pas sauver avis d'un lieu?
Où '@ place_id' est-il défini? –
Humm, mais appelez comme je ne suis pas sûr. Qu'est-ce qui serait utile pour moi de mettre à jour la question? Contrôleur de lieux? Vue des lieux? – samureira
Je veux dire, si '_form.html.erb' est rendu dans le' lieux # show', mais votre méthode show a seulement '@ reviews' et' @ review'. –