Ich habe diesen Fehler seit Stunden behoben und ich habe keine Ahnung, was ich falsch mache. Ich kann die Artikelsammlung einfach nicht für einen einzelnen Benutzer anzeigen lassen. Jeder Artikel gehört einem einzelnen Benutzer und jeder Benutzer hat viele Artikel. Momentan wird mein partielles Rendering nicht in der Showansicht des Benutzers angezeigt.Rails teilweise Vorlage mit Sammlung nicht richtig rendern
Wenn ich <%= render partial: "https://stackoverflow.com/users/item", collection: @user.items %>
zu <%= render partial: "https://stackoverflow.com/users/item", collection: @items %>
dann die Teilvorlage ändern wird gerendert, aber alle Elemente angezeigt, unabhängig davon, welcher Benutzer sie gehören. Nach dem Überprüfen der Datenbank wird jeder Eintrag ordnungsgemäß mit einem Fremdschlüssel user_id gespeichert, so dass das nicht das Problem ist.
Wie bekomme ich die richtigen Artikel für jeden Benutzer angezeigt? Ich habe schon mehrmals Teiltöne verwendet und habe alten und neuen Code miteinander verglichen. Ich kann den Unterschied nicht sehen und ich verliere meinen Verstand. Ich habe das allgemeine Internet, Stack Overflow, durchsucht und die Rails Guides for Layouts and Rendering überprüft. Ich habe den entsprechenden Code unten veröffentlicht und freue mich, noch etwas zu posten. Bitte helfen Sie!
views/users/_item.html.erb
<div>
<h4>ITEM: <%= item.title %></h4>
<p class="item"><%= item.cost %></p>
</div>
views/users/show.html.erb
<h1>Users#show</h1>
<p>Find me in app/views/users/show.html.erb</p>
<div><%= @user.first_name %></div>
<h3>My List</h3>
<%= render partial: "https://stackoverflow.com/users/item", collection: @user.items %>
<span>ADD ITEM <%= link_to image_tag("Plus-50.png"), new_user_item_path(@user), class: "items-nved" %> </span>
Controller/users_controller.rb
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
def index
@users = User.all
render :index
end
def show
@user = User.find(params[:id])
# @item = Item.find(params[:id])
@items = Item.all
@item = Item.new
@item.user_id = @user.id
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to new_session_path, method: :get
else
render "new"
end
end
def edit
end
def update
end
def destroy
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:first_name, :last_name, :birthday, :city, :state, :email, :password, :password_confirmation)
end
end
Controller/items_controller.rb
class ItemsController < ApplicationController
include ItemsHelper
before_filter :require_login, only: [:new, :create, :update, :destroy]
def index
@current_user = current_user
@items = Item.all
end
def show
@user = current_user
@item = Item.find(params[:id])
end
def new
@user = current_user
@item = Item.new
end
def create
@user = current_user
@item = Item.new(item_params)
@item.user_id = params[:user_id] # set user_id param from database to current_user id
@item.save
redirect_to user_item_path(@user, @item)
end
def edit
@user = current_user
@item = Item.find(params[:id])
end
def update
@user = current_user
@item = Item.find(params[:id])
@item.update(item_params)
redirect_to user_path(@user)
end
def destroy
@user = User.find params[:user_id]
@item = Item.find(params[:id])
@item.destroy
redirect_to user_path(@user)
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :birthday, :city, :state, :email, :password, :password_confirmation)
end
def require_login
unless logged_in?
flash[:error] = "You must be logged in to access this section"
redirect_to new_login_url # halts request cycle
end
end
Sie können '@ user' einfach so 'collection: @ user' übergeben und in der Renderdatei' @ user.items' loopen. Versuchen Sie auch wie folgt '<% = render partially:"/users/item ", lokal: {user_items: @ user.items}%>' – 7urkm3n