I have a show page connected to my Rental object. When iterating over the Reviews which belong_to the Rental, it only returns the first Review object. I have several Review objects connected to each Rental through my seed file, but can't seem to get all of them to reflect. Here are my files:
rentals/show.html.erb
<h2> Rental Show Page </h2>
<div class="table-responsive">
<table class="table">
<tbody>
<tr>
<td> <strong> Street Address: </strong> </td>
<td> <%= @rental.street_add %> </td>
</tr>
<tr>
<td><strong> City: </strong></td>
<td><%= @rental.city %></td>
</tr>
<tr>
<td><strong> State: </strong></td>
<td><%= @rental.state %></td>
</tr>
<tr>
<td><strong> Owner: </strong></td>
<td><%= @rental.owner %></td>
</tr>
</tbody>
</table>
<li><%= link_to 'Edit', rental_path(@rental) %> </li>
<li><%= button_to 'Delete', rental_path(@rental), method: :delete, data: {confirm: "Are you sure?"} %></li>
<li><%= link_to 'Home', rentals_path %></li>
<h1> Reviews </h1>
<% @rental.reviews.each do |reviews| %>
<%= link_to "#{@review.title}", rental_review_path(@rental), class: "btn btn-danger" %>
<% end %>
<h2>Add a review:</h2>
<%= link_to "Add a Review", new_rental_review_path(@rental), class: "btn btn-danger" %>
My Rentals Controller
class RentalsController < ApplicationController
def index
@rentals = Rental.all
end
def show
@review = Review.new
@review = Review.find_by(id: params[:id])
return if @rental = Rental.find_by(id: params[:id])
redirect_to root_path, notice: "Rental is not available"
end
def new
@rental = Rental.new
end
def edit
@rental = Rental.find_by(id: params[:id])
end
def create
@rental = Rental.new(rental_params)
if @rental.save
redirect_to @rental, notice: "Your rental has been succesfully added."
else
render :new
end
end
def update
@rental = Rental.find_by(id: params[:id])
@rental.update(rental_params)
redirect_to @rental, notice: "Your rental has been succesfully updated."
end
def destroy
@rental = Rental.find_by(id: params[:id])
@rental.destroy
redirect_to root_path
end
private
def rental_params
params.require(:rental).permit(
:street_add,
:city,
:state,
:owner,
)
end
end
And my seeds file:
Rental.create(street_add: "1428 Elm Street", city: "Springwood", state: "Ohio", owner: "Fred D. Krueger")
Rental.create(street_add: "112 Ocean Avenue", city: "Amityville", state: "NY", owner: "Butch DeFeo")
Rental.create(street_add: "8601 N Thorne Ln SW", city: "Lakewood", state: "WA", owner: "Kirtland Cutter")
User.create(username: "AAA", email: "test@test1.com", password: "123456")
User.create(username: "BBB", email: "test@test2.com", password: "1234567")
User.create(username: "CCC", email: "test@test3.com", password: "12345678")
Review.create(title: "Weird Dreams, Nice Lawn", body: "Open kitchen space, large green lawn. Had very strange dreams while living here.", rating: 3, rental_id: 1, user_id: 1)
Review.create(title: "Tenant Left Items", body: "Loved the master bedroom, but wasn't thrilled that the tenant left behind items.", rating: 2, rental_id: 2, user_id: 2)
Review.create(title: "Beautiful Furnished Basement", body: "Basement was fully furnished and was able to convert it into an office space. Loved the quiet neighborhood.", rating: 5, rental_id: 3, user_id: 3)
Review.create(title: "I loved it, husband didn't", body: "While I loved the quaint house, my husband was adamant that he didn't. (Something about voices). Great price for the location.", rating: 4, rental_id: 1, user_id: 1)
Review.create(title: "Very Cold", body: "The house was next to impossible to heat and was cold even in the summer. Heating costs were through the roof.", rating: 2, rental_id: 2, user_id: 2)
Review.create(title: "I loved it, husband didn't", body: "While I loved the quaint house, my husband was adamant that he didn't. (Something about voices). Great price for the location.", rating: 4, rental_id: 3, user_id: 3)
Review.create(title: "Sprawling Estate", body: "Plenty of space, landlord was very accomodating", rating: 5, rental_id: 1, user_id: 1)
Review.create(title: "Beautiful Trees in Backyard", body: "Beautiful trees in backyard although the owls made strange noises at night.", rating: 3, rental_id: 2, user_id: 2)
Review.create(title: "Stains Under All Rugs", body: "I noticed the rugs were placed oddly, and when lifted to clean the floors revealed large rust stains. We had someone out twice to clean them but they weren't able to be removed. Faucets produced rust colored water as well.", rating: 2, rental_id: 3, user_id: 3)
puts "data loaded success"
What I'm trying to accomplish is multiple reviews listed for each rental. Here is a screenshot of what I have for the rentals#show page vs the screenshot of all reviews:
Any help is very much appreciated!
UPDATE: I was able to find the solution by updating the show page to reflect the link_to as such:
<h2> Rental Show Page </h2>
<div class="table-responsive">
<table class="table">
<tbody>
<tr>
<td> <strong> Street Address: </strong> </td>
<td> <%= @rental.street_add %> </td>
</tr>
<tr>
<td><strong> City: </strong></td>
<td><%= @rental.city %></td>
</tr>
<tr>
<td><strong> State: </strong></td>
<td><%= @rental.state %></td>
</tr>
<tr>
<td><strong> Owner: </strong></td>
<td><%= @rental.owner %></td>
</tr>
</tbody>
</table>
<li><%= link_to 'Edit', rental_path(@rental) %> </li>
<li><%= button_to 'Delete', rental_path(@rental), method: :delete, data: {confirm: "Are you sure?"} %></li>
<li><%= link_to 'Home', rentals_path %></li>
<h1> Reviews </h1>
<% @rental.reviews.each do |reviews| %>
<li><%= link_to "#{reviews.title}", rental_review_path(@rental, reviews), class: "btn btn-danger" %></li>
<% end %>
<h2>Add a review:</h2>
<%= link_to "Add a Review", new_rental_review_path(@rental), class: "btn btn-danger" %>
And updating the controller like this:
class RentalsController < ApplicationController
def index
@rentals = Rental.all
end
def show
@review = Review.find_by(id: params[:id])
return if @rental = Rental.find_by(id: params[:id])
redirect_to root_path, notice: "Rental is not available"
end
def new
@rental = Rental.new
end
def edit
@rental = Rental.find_by(id: params[:id])
end
def create
@rental = Rental.new(rental_params)
if @rental.save
redirect_to @rental, notice: "Your rental has been succesfully added."
else
render :new
end
end
def update
@rental = Rental.find_by(id: params[:id])
@rental.update(rental_params)
redirect_to @rental, notice: "Your rental has been succesfully updated."
end
def destroy
@rental = Rental.find_by(id: params[:id])
@rental.destroy
redirect_to root_path
end
private
def rental_params
params.require(:rental).permit(
:street_add,
:city,
:state,
:owner,
)
end
end
Thank you to everyone who answered!
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.