Ich habe eine Listings Controller
(User System Entwickeln) und in Rails 3 ibefore_filter: authenticate_user !, außer: [: index]/Rails 4
before_filter :authenticate_user!, except: [:index]
nur verwendet um zu überprüfen, ob ein Benutzer angemeldet wurde bevor Sie einen bestimmten Eintrag anzeigen.
Meine Homepage (Index) zeigt am unteren Rand eine Liste an, die der Benutzer sehen kann, aber sobald er auf einen klickt, um ihn anzuzeigen, wird er auf die Anmeldeseite umgeleitet.
Das ist, warum in meinem Controller i statt
hatte scheintListing.new -> current_user.listings.new
In Rails 4 Dinge geändert zu haben und ich kann nicht den richtigen Weg, es zu tun.
Ich suchte ein wenig und fand, dass der Befehl zu
before_action :authenticate_user!, :except => [:index]
Ein Gast kann den Index jetzt ansehen geändert wurde, aber wenn er auf einen Eintrag klickt, wird er nicht auf die Anmeldeseite umgeleitet, statt i Erhalte diesen Fehler.
NoMethodError in ListingsController#show
undefined method `listings' for nil:NilClass
# Use callbacks to share common setup or constraints between actions.
def set_listing
@listing = current_user.listings.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
Meine Anzeigen-Controller
class ListingsController < ApplicationController
before_action :set_listing, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, :except => [:index]
# GET /listings
# GET /listings.json
def index
@listings = Listing.order("created_at desc")
end
# GET /listings/1
# GET /listings/1.json
def show
end
# GET /listings/new
def new
@listing = current_user.listings.build
end
# GET /listings/1/edit
def edit
end
# POST /listings
# POST /listings.json
def create
@listing = current_user.listings.build(listing_params)
respond_to do |format|
if @listing.save
format.html { redirect_to @listing, notice: 'Listing was successfully created.' }
format.json { render action: 'show', status: :created, location: @listing }
else
format.html { render action: 'new' }
format.json { render json: @listing.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /listings/1
# PATCH/PUT /listings/1.json
def update
respond_to do |format|
if @listing.update(listing_params)
format.html { redirect_to @listing, notice: 'Listing was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @listing.errors, status: :unprocessable_entity }
end
end
end
# DELETE /listings/1
# DELETE /listings/1.json
def destroy
@listing.destroy
respond_to do |format|
format.html { redirect_to listings_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_listing
@listing = current_user.listings.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def listing_params
params.require(:listing).permit(:title, :description, :image)
end
end
EDIT: PROBLEM 2
Wenn eine andere angemeldete Benutzer versucht, einen Eintrag anzuzeigen, die ein anderer Nutzer im erstellt bekommen diese ->
und das Protokoll
U wünschen konn tun 'authenticate_user' vor' set_listing' – Santhosh
Sie meinen, bewegen Sie einfach den authenticate_user über die set_listing Zeile? –
ja. hast du das versucht? – Santhosh